2016年9月18日日曜日

VB EF6 Entity Framework お試し 1 モデル作成

Entity Framework で Database を扱う 試行錯誤編 です。
VB.Net から見ていると、 泥沼 いえいえ 茨の道 ですね。
もう、 さっぱり ? です。
ああ、 痛い痛い!。  投げ出したい!。  誰か、止めて!。


Visual Studio 2013 Community Update 5 で Visual Basic (VB.Net) を使って、
Database (DB) を WPF で扱う奮闘記です。

利用するのは Entity Framework 6.1.3 と、Microsoft SQL Server Data Tools 12.0.60629.0 です。
DB は LocalDB 上の .mdf ファイルで、 SQLServer 2014 (v12.0) の インスタンス名 (localdb)¥MSSQLLocalDB と仮定します。
元々の DB は SQLServer Compact 3.5 SP1 (.sdf ファイル)で、 それから Migrate (移行)したものです。

LocalDB はそのインスタンス毎に 管理 DB を持っていますので、複数の開発環境下で作業する場合には、
どのインスタンスに用意した DB か、 常々、意識する事が重要です。
また、ファイルは RDB エンジンのバージョン情報を保持しているので、
ファイル配置で、下位のバージョンの管理 DB に登録(アタッチ?)する事は基本的には出来ない様です。
それなりの手順を踏めば可能なのだと思いますが、 単なるファイルコピーの場合、守らないと駄目です。


さぁ、ドタバタ劇、 いえいえ、試行錯誤の 始まり始まり。


どうして、ドタバタ劇になったか?。
それは、
Entity Framework の資料は C# に偏っている事と、 バージョンに依ってアプローチが違う事、そして、Console での説明が多い事です。
つまり、調べても調べても、ぐちゃぐちゃ。  さっぱり ? です。
  Form > WPF > EF と進むに従って、情報量が累進的に低下する気がします。.
  そこに輪を掛けるのが、msdn (help) での解説コードの不足ですね。.
  C# & EF5 ならば、 https://msdn.microsoft.com/ja-jp/data/jj574514 がお勧め。.

何とか、GUI (Window)で動かす処に漕ぎ着けましたので、 ひとまず、その纏めです。

最新版の Entity Framework (現在 6.1.3)は 既に Visual Studio に 導入済み と仮定します。
  参考 URL : https://msdn.microsoft.com/ja-jp/data/ee712906



第1。
DB ファイルを任意の場所に配置します。  プログラムには持たせません。


第2。
Visual Studio (2013 の場合) の Default Setting を変えます。  あっ、以下、日本語化していない環境です。.
標準では TOOLS > Options > Database Tools > Data Connections が (LocalDB)¥v11.0 になっている筈です。
これを、(LocalDB)¥MSSQLLocalDB に変えて、保存します。
こうする事で、TOOLS > Connect Databese... > Advanced... で Source > Data Source から、
接続先のインスタンスを選択出来る様になります。
標準状態のままでは、複数の LocalDB がインストールされていても、既定のものしか選択出来ません。
うちの環境の場合、 ¥MSSQLLocalDB は SQL Server 2014 (v12.0) の LocalDB になります。

尚、インストールされ設定されている LocalDB のインスタンス名を確認するには、
cmd.exe を起動して、以下のコマンドを入力します。  sqllocaldb i
C:¥Users¥UserA>sqllocaldb i
MSSQLLocalDB
ProjectsV12
v11.0

C:¥Users¥UserA>
更に、インスタンスの削除は  sqllocaldb d "instance name"
  また、インスタンスの追加は  sqllocaldb c "instance name" [version-number] [-s] .

設定されている LocalDB の サーバー名 が返されます。
上記の例では、MSSQLLocalDB と ProjectsV12 と v11.0 と 3個が設定されています。

接続文字列の 名称 は (localdb)¥MSSQLLocalDB 或いは (localdb)¥v11.0 等となります。


第3。
モデルの作成(自動生成) です。
その前に、 Entity Framework の最新版を確認して下さい。
   一度もした事が無ければ、次の作業を。 (次回以降は不要です。) 

   TOOLS > NuGet Package Manager > Package Manager Console と辿り
      PM> Install-Package EntityFramework


   https://msdn.microsoft.com/ja-jp/data/ee712906
   http://www.nuget.org/packages/EntityFramework/

   尚、組み込まれた Entity Framework は Solution 直下に "package" Folder が作られ、
   その下に、"EntityFramework.6.1.3" と言う名称で Sub-Folder があります。  6.1.3 が Version 。
   更に、Output Folder (ex. Debug/Release) に EntityFramework.dll がコピーされ、
   Property から製品バージョン ex. 6.1.3-40302 も確認出来ます。.
.
DB とプログラム(フロントエンド)を繋ぐクラスを作って貰いましょう。
Database First でモデルを作ります。  いえ、正確には、一番左の EF Designer from Database です。

Solution Exploror から Project を選択して、右クリックし、 新規項目を追加します。
選ぶのは ADO.NET Entity Data Model です。

モデル名はここでは Model1 として進めます。
ウィザードに従って進めますが、
途中、 DataBase の複製作成の有無 [No !] と、 名称を複数形にするか否か [Yes !] とを聞かれます。
[ ]  に記載した内容で進みます。
自動生成されるコード群 (ファイル群)
                Model1.edmx
                    Model1.Context.tt
                        Model1.Context.vb
                            [Class] <db-name>Entities
                    Model1.tt
                        <db-table-name>.vb
                                [Class] <db-table-name>
です。
<db-name>Entities の名称は使う Database から取得されますが、 ウィザード内で変更が可能です。
    参考迄に 
    DB に従う形で、Class 生成されますが、複数形に移行 を選んで置いた方が視認性が高いですね。
    ここで問題となるのが、元の DB での命名。
    何も考えずに、最初から複数形や集合名(ex. xxxList)で命名してあると、何か変な事になりますが、
    コードの見た目の問題で、実際には問題は無い筈です。
    気になる場合には、事前に DB スキーマで命名を変えて置かれる事をお勧めします。.


この作業は、利用言語に係わらず、 IDE 任せですので、 C# 向けの解説でも参考になります。
図が多用された以下の記事が分かり易いと思います。

  既存データベースの EF デザイナー (Database First)
    3.モデルのリバース エンジニアリング
  https://msdn.microsoft.com/ja-jp/data/jj206878


この作業が終われば、Console なら 直ぐにでも 使う事が出来る 準備完了 になっています。
Linq (統合クエリ) を使って、データを取得すれば、閲覧や編集が可能です。
でも、 GUI つまり WPF を使って画面を用意するには、もうひとつ やらねば ならぬ 事が残っています。
Data Source の作成です。
それは、次回 VB EF6  Entity Framework お試し 2 データソース作成 に。





[2016/09/18] 間違い訂正 Code First from Database > EF Designer from Database
[2016/09/18] 間違い訂正 ファイル群記述ミス 重複不要行を削除

0 件のコメント:

コメントを投稿