none
EntityFrameworkをソリューション内の複数プロジェクトで使用する方法 RRS feed

  • 質問

  •   

    EntityFrameworkをソリューション内の複数プロジェクトで方法ついて質問です。
    複数プロジェクトで使用する場合はどのような構成、設定が必要でしょうか。

    いろいろやってみましたがうまくいかなく、ご教授お願いします。


    この構成で現在EF6.2で動いてます。

    ソリューション’TEST’
     - Main
      - Common
        - AddDbContext.cs  ※コードファーストを使用してます。
      - Model
      - ViewModel
      - View
      - app.config
      - ...


    ↓ プロジェクトを分けて作成していきたいので変更したい


    ソリューション’TEST’
     - Main
      - Common
        - AddDbContext.cs
      - Model
      - ViewModel
      - View
      - app.config
      - ...
     - Sub
      - Common
        - AddDbContext.cs  ※←ここにも配置する必要がある?
      - Model
      - ViewModel
      - View
      - app.config     ※←接続文字列もプロジェクトごとに設定したほうが良い?、またはMainのAppConfigを共有?
      - ...
     - ClassLibrary
      - ...        ※←ClassLibraryに置いたほうが良い?(循環参照はできなかったのでここに置くのはそもそも×かも)


    PrismのModuleを使用しているため、MainプロジェクトからSubを参照してます。

    AddDbContext.cs

    using System.Data.Entity;   // 追加(Entity Framework)
    
    using Main.Models;
    
    namespace Main.Common {
        internal class AddDbContext : DbContext {
            public static string DebugConnectionString { get; set; }
            public static string ReleaseConnectionString { get; set; }
    
    #if DEBUG
            public AddDbContext() : base("Main.Properties.Settings.DebugConnectionString") { }
    #else
            public AddDbContext() : base("Main.Properties.Settings.ReleaseConnectionString") {}
    #endif
            public DbSet<Empolyee> M_Empolyees { get; set; }
    set; }
        }
    }


    • 編集済み yuchan01 2018年7月17日 3:21
    2018年7月16日 14:45

回答

  • WPF + Prism の特殊事情とかがあるということですと分かりませんが・・・

    > EntityFrameworkをソリューション内の複数プロジェクトで方法ついて質問です。
    > 複数プロジェクトで使用する場合はどのような構成、設定が必要でしょうか。
    >
    > いろいろやってみましたがうまくいかなく、ご教授お願いします。

    「うまくくいかない」というのは具体的にどういうことでしょう?

    基本的に、Entity Framework のコンテキストクラスとテーブル定義のクラス(モデル)を分けて単独のプロジェクトとし、同じソリューション内の他のプロジェクトから利用するのは、可能なはずなのですが。

    下の画像は、DB First で作った Entity Data Model のプロジェクト(NorthwindEdm)、コンソールアプリのプロジェクト(ConsoleApplication1)、Windows Forms アプリのプロジェクト(WindowsFormsApplication1)の例です。



    ConsoleApplication1, WindowsFormsApplication1 では、(1) NorthwindEdm を参照設定に加え、(2) App.config に接続文字列を追加すれば使えるようになります。

    質問者さんのケース Code First, WPF + Prism とは違うので、その関係で上記がハズレでしたらすみません。


    #そもそも Code First のモデルを複数プロジェクトで使うというのは解せませんが・・・
    • 編集済み SurferOnWww 2018年7月18日 2:38 訂正
    • 回答としてマーク yuchan01 2018年7月19日 3:33
    2018年7月18日 2:36

すべての返信

  • WPF + Prism の特殊事情とかがあるということですと分かりませんが・・・

    > EntityFrameworkをソリューション内の複数プロジェクトで方法ついて質問です。
    > 複数プロジェクトで使用する場合はどのような構成、設定が必要でしょうか。
    >
    > いろいろやってみましたがうまくいかなく、ご教授お願いします。

    「うまくくいかない」というのは具体的にどういうことでしょう?

    基本的に、Entity Framework のコンテキストクラスとテーブル定義のクラス(モデル)を分けて単独のプロジェクトとし、同じソリューション内の他のプロジェクトから利用するのは、可能なはずなのですが。

    下の画像は、DB First で作った Entity Data Model のプロジェクト(NorthwindEdm)、コンソールアプリのプロジェクト(ConsoleApplication1)、Windows Forms アプリのプロジェクト(WindowsFormsApplication1)の例です。



    ConsoleApplication1, WindowsFormsApplication1 では、(1) NorthwindEdm を参照設定に加え、(2) App.config に接続文字列を追加すれば使えるようになります。

    質問者さんのケース Code First, WPF + Prism とは違うので、その関係で上記がハズレでしたらすみません。


    #そもそも Code First のモデルを複数プロジェクトで使うというのは解せませんが・・・
    • 編集済み SurferOnWww 2018年7月18日 2:38 訂正
    • 回答としてマーク yuchan01 2018年7月19日 3:33
    2018年7月18日 2:36
  • ご回答ありがとうございます。

    コード間違いがあり、コードファーストで、コンテキストとモデルを単一プロジェクトとすればできました。

    たしかにコードファーストのモデル(テーブル定義)を複数プロジェクトで使うのは違うかもしれません。

    ご指摘のおかげで、最初の質問のプロジェクトを分けるというのは間違っているのかなと思いましたが、

    またプロジェクトを分ける時はどんな時なのかは疑問は残ります。

    とりあえずDBを使う場合は分けないようにしようと思います。

    ありがとうございます。
    • 編集済み yuchan01 2018年7月19日 3:32
    2018年7月19日 3:30