首页 > 解决方案 > EF6,DbContext/POCO 设置虚拟导航属性以附加新对象:可能吗?

问题描述

我正在将一个非常旧的 EF6 edmx/ObjectContext 实现切换到 DbContext/POCO。我能够生成 POCO 模型,并且所有读取操作现在似乎都在工作。

我的问题是我有数千行代码可以执行以下操作:

var person = db.Persons.Single(x=> x.Id = 45);
var phone = new Phone { Person = person, Number = "123-456-7890"};

在旧的 edmx/ObjectContext 世界中,当我设置 时Person = person,状态phone将是Added.

在新的 DbContext/POCO 世界中,这个 set 完全没有效果,状态仍然Detached.

新模型代码使用类似这样的东西来创建导航属性:

public virtual Person Person { get; set; }

而旧的 edmx 代码是一个 getter setter,而 setter 正在这样做:

((IEntityWithRelationships)this).RelationshipManager
    .GetRelatedReference<Phone>("Model.fk_Person_Phone", "Person")
    .Value = value;

有什么方法可以使virtualnav 属性的工作方式与旧方法类似,并将新对象附加到数据库?

标签: entity-framework-6

解决方案


推荐阅读