场景:试图从一个数据库中提取和重新排列信息到另一个数据库。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 的 Derived 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
{
/*****...... ******/
}