小编boy*_*yke的帖子

使用ObjectContext和DbContext

场景:尝试从一个数据库中提取和重新排列信息.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();
        }
 }
Run Code Online (Sandbox Code Playgroud)

它发生在上面箭头标记的代码中的点("< - ")

FirstPVC是一个DB B属性,但在箭头点它抱怨没有属于DB B上下文的实体的概念模型.

这很奇怪,因为我尝试将DB B实体存储到DB B上下文.为什么要关心DB A的实体呢?

所有上下文都包含在同一个项目中.但是DB B的Derived DbContext只知道它自己的DbSet <>属性,突然在尝试向DbSet <>属性添加内容时,它会给我上面的粗体错误.

谁知道为什么会这样?为什么DbContext要关心另一个上下文的实体,特别是ObjectContext派生类之一.

Perhapse有用的是注意到它抱怨的实体看起来有点像这样

[EdmEntityTypeAttribute(NamespaceName="Irma2Model", Name="AccessProvider")]
[Serializable()]
[DataContractAttribute(IsReference=true)]
public partial class AccessProvider : EntityObject
{
    /*****...... ******/
}
Run Code Online (Sandbox Code Playgroud)

.net c# entity-framework objectcontext dbcontext

6
推荐指数
1
解决办法
3903
查看次数

标签 统计

.net ×1

c# ×1

dbcontext ×1

entity-framework ×1

objectcontext ×1