我有下一个实体:
public class MyEntity
{
public virtual int Id { get; set; }
public virtual MySecondEntity SecondEntity { get; set; }
}
public class MySecondEntity
{
public virtual int Id { get; set; }
...
some properties here
...
}
我不想创建 MySecondEntityID 属性以获得干净的模型。
我需要通过其 Id 设置 myEntity.MySecondEntity,但我不想从数据库请求 MySecondEntity。
是否可以在不创建 MyEntity.MySecondEntityID 属性并且不加载整个 MySecondEntity 对象甚至没有任何数据库请求的情况下做到这一点?
最佳答案
可以手动创建 MySecondEntity
对象,并将其作为未更改的对象附加到上下文。
var secondEntity = new MySecondEntity();
secondEntity.Id = id;
context.MySecondEntities.Attach(secondEntity);
entity.SecondEntity = secondEntity;
为简单起见,我忽略了上下文中已存在具有相同键的 MySecondEntity
对象的可能性。要使其正常工作,您应该检查本地实体(例如通过搜索 context.MySecondEntities.Local
)并重新使用在其中找到的实体。
注意:EF 无法知道 secondEntity
的其他属性(保留为默认值)与数据库中的内容不对应。对于您现在正在做的事情,这并不重要,但在以后的阶段可能会很重要。
关于c# - 在 Entity Framework 中设置只有 id 的导航属性的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21582976/