シナリオ: あるデータベースから別のデータベースに情報を抽出して再配置しようとしています。DB A には取得したいデータがあります。少し異なる構造でDB Bに保存したいと思います。
DB AI は EDMX データベースで生成されたモデルを使用するため、ObjectContext の派生物を使用します。DB BI はコード生成を希望しています。そのため、パッケージ マネージャーを介して EntityFramework 4.1 をインストールすることにより、コード/モデル ファーストのアプローチを使用します。したがって、DB B は DbContext 派生物を使用します
DB A から DB B に情報を保存しようとすると、次のように表示されます。
テスト メソッド RoutIT.Irma.Import.Service.Test.ImportIrma2ProductTests.ImportProducts が例外をスローしました: System.ArgumentException: 「DB A の EDMX モデル内のエンティティ」の概念モデル タイプが見つかりませんでした
実際には、DB B エンティティを DB B の派生 DbContext の DbSet プロパティに追加するときに実行されます。したがって、コードは次のようになります
using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required))
{
foreach (FirstPVC pvc in pvcs)
{
this._irmaImport.FirstPVCs.Add(pvc); <--
this._irmaImport.SaveChanges();
}
scope.Complete();
}
}
上記の矢印 ("<--") でマークされたコード内のポイントで発生します。
FirstPVC は DB B のプロパティですが、矢印の時点で、DB B のコンテキストに属するエンティティの概念モデルがないことに不満を感じています。
DB B エンティティを DB B コンテキストに格納しようとしているので、これは奇妙です。DB A のエンティティを気にする必要があるのはなぜですか。
すべてのコンテキストが同じプロジェクトに含まれています。しかし、DB B の Derived DbContext は、それ自身の DbSet<> プロパティに関する知識しか持っていません。突然、DbSet<> プロパティに何かを追加しようとすると、上記の太字のエラーが表示されます。
なぜこれが起こるのか知っている人はいますか?DbContext が別のコンテキストのエンティティ、特に ObjectContext 派生クラスのエンティティを気にする必要があるのはなぜですか。
おそらく、それが不平を言っているエンティティがこのように見えることに注意することは役に立ちます
[EdmEntityTypeAttribute(NamespaceName="Irma2Model", Name="AccessProvider")]
[Serializable()]
[DataContractAttribute(IsReference=true)]
public partial class AccessProvider : EntityObject
{
/*****...... ******/
}