2017年7月15日土曜日

【SQL Server】【Visaul Studio】DBからC#コード生成

◆メニュー
【SQL Server】開発環境構築(ER図作成にSSMSを使用)

◆概要
SSMSで作成したDBインスタンスからC#のエンティティクラスを生成する手順

◆環境
Visual Studio Pro以上(Community版は未調査。)

1. Winキー押下し、visを入力し、Enterキー押下。(環境によってはVisだけでは足りないので、入力文字を増やすこと)

2. [ファイル]-[新規作成]-[プロジェクト]を選択。

3. 適切なテンプレートを選択し、適切なプロジェクト名を設定し、OKボタン押下。

4. Ctrl+Shift+Bでビルドし、F5キーで実行まで確認しておく。

5. プロジェクトを右クリックし、[追加]-[新しい項目]を選択。

6. 「ADO.NET Entity Data Model」を選択、適切な名前を入力し、「追加」ボタン押下。

7. 「データベースからEF Designer」を選択し、「次へ」ボタン押下。

8. サーバ名・データベース名を入力し、「テスト接続」ボタン押下。サーバ名・DBインスタンス名は読み替えること。

9. 「OK」ボタン押下。

10. 「接続設定に名前を付けて App.Config」に保存をチェックし、「次へ」ボタン押下。

11. 「Entity Framework 6.x」を選択し、「次へ」ボタン押下。

12. データベースオブジェクトは全選択し、「完了」ボタン押下。下記ではビューが存在しないため、チェックしていないが、基本的には全てにチェックを入れる。(モデル名前空間はDbEmployeesModelのようにしたほうがいいかも。)

13. 「OK」ボタン押下。

14. ソリューションエクスプローラーにedmxが作成され、配下にテーブル名.csが生成ていることを確認。

15. MainWindows.xamlをダブルクリックし、ツールボックスからButtonをD&D。

16. フォーム上に配置したbuttonを選択し、プロパティパネルの⚡ボタンを押下し、Clickテキストボックスをダブルクリック。
17. コードが生成されることを確認。

18. 下記のようにDBアクセスのコードを入力し、ビルド&実行。


namespace WpfApplication1
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void button_Click(object sender, RoutedEventArgs e)
        {
            using (var ctx = new DB_EMPLOYEESEntities())
            {
                using (var tran = ctx.Database.BeginTransaction())
                {
                    ctx.T_部署.Add(new T_部署() { 部署ID = 1, 部署名 = "開発1" });
                    ctx.T_社員.Add(new T_社員() { 社員ID = 1, 姓 = "名無し", 名 = "太郎", 所属部署ID = 1 });

                    ctx.SaveChanges();
                    tran.Commit();
                }

                var ret = (from shain in ctx.T_社員
                           join bu in ctx.T_部署
                             on shain.所属部署ID equals bu.部署ID
                         select new { shain, bu }).First();

                // Namespace==Systemは、外部参照などを表示しないようにプリミティブとstringのみにフィルタ
                // しっくりこないが…。
                Func<object, List<string>> trans = o =>
                    (  from ps in o.GetType().GetProperties()
                      where ps.PropertyType.Namespace == "System"
                     select ps.Name + ":" + ps.GetValue(o, null)).ToList();

                MessageBox.Show(
                    string.Join(",", trans(ret.bu   )) + Environment.NewLine +
                    string.Join(",", trans(ret.shain)));
            }
        }
    }
}

19. Buttonを押下。

20. selectの結果も正しい。


21. SSMSで確認しても、レコードが挿入されていることが確認できる。


0 件のコメント:

コメントを投稿