背景:
同じソリューション内に、同じモデル クラスを共有する Web API プロジェクトとクラス ライブラリ プロジェクトがあります。両方のプロジェクトが同じデータベースを共有し、どちらも DbContext を使用してデータの読み取り/書き込みを行います。
Web API プロジェクトは、典型的な UnitOfWork パターンでセットアップされ、問題なく動作します。
クラスプロジェクトは少し異なります。Web.config ファイルではなく、コンストラクターで接続文字列を指定します。
class MyContext : DbContext
{
public MyContext(string connectionString)
: base()
{
// Do this to force me to use eager loading
this.Configuration.LazyLoadingEnabled = false;
// Init connection string
this.Database.Connection.ConnectionString = connectionString;
Database.SetInitializer <CFCalcContext> (null);
}
... DbSets ...
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
... modelBuilder details ...
}
}
Web API を使用して、クラス ライブラリで定義された関数を呼び出します。クラス ライブラリを使用してデータベースにクエリを実行しようとすると、エラーが発生します。
問題:
クラス ライブラリ プロジェクトでは、次のような内部例外を持つ EntityCommandCompilationException を取得します。
InnerException: System.Data.MappingException HResult=-2146232032 Message= (82,10): エラー 3034: 行 82、90 で始まるフラグメントのマッピングの問題: 異なるキーを持つ 2 つのエンティティが同じ行にマップされています。これらの 2 つのマッピング フラグメントが、異なるキーを持つエンティティの 2 つのグループを同じ行のグループにマップしないようにしてください。
(82,10) : エラー 3034: 行 82、98 で始まるフラグメントのマッピングの問題: 異なるキーを持つ 2 つのエンティティが同じ行にマップされています。これらの 2 つのマッピング フラグメントが、異なるキーを持つエンティティの 2 つのグループを同じ行のグループにマップしないようにしてください。
(82,10) : エラー 3034: 行 82、106 で始まるフラグメントのマッピングの問題: 異なる主キーを持つ 2 つの行が同じエンティティにマップされています。これらの 2 つのマッピング フラグメントが、同じキーを持つエンティティの 2 つのグループを重複する 2 つの行のグループにマップしないようにしてください。
(82,10): エラー 3034: 行 82、112 で始まるフラグメントのマッピングの問題: 異なるキーを持つ 2 つのエンティティが同じ行にマップされています。これらの 2 つのマッピング フラグメントが、異なるキーを持つエンティティの 2 つのグループを重複する 2 つの行のグループにマップしないようにしてください。
(82,10) : エラー 3034: 行 82、118 で始まるフラグメントのマッピングの問題: 異なるキーを持つ 2 つのエンティティが同じ行にマップされています。これらの 2 つのマッピング フラグメントが、異なるキーを持つエンティティの 2 つのグループを重複する 2 つの行のグループにマップしないようにしてください。
(90,10) : エラー 3034: 行 90、98 で始まるフラグメントのマッピングの問題: 異なるキーを持つ 2 つのエンティティが同じ行にマップされています。これらの 2 つのマッピング フラグメントが、異なるキーを持つエンティティの 2 つのグループを同じ行のグループにマップしないようにしてください。
また、派生した DbContext クラス (クラス ライブラリ内) を右クリックし、Entity Framework Power Tools を使用して "エンティティ データ モデルを表示" すると、次のエラーが表示されます: "DbContext から派生した構築可能な型が、選択したファイルに見つかりませんでした。 " これは、Web API プロジェクトで問題なく機能します。
同じデータベースに接続し、基本的に同じように構成されている 2 つの DbContext のパフォーマンスが異なるのはなぜですか? 構成手順が欠落しているに違いありませんが、どれがわかりません。
助けてくれてありがとう!