在Entity Framework中设置仅具有id的导航属性的最佳方法是什么?

Ale*_*yev 8 c# entity-framework navigation-properties entity-framework-6

我有下一个想法:

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
    ...
}
Run Code Online (Sandbox Code Playgroud)

我不想创建MySecondEntityID属性以获得干净的模型.

我需要通过Id设置myEntity.MySecondEntity,但我不想从DB请求MySecondEntity.

是否可以在不创建MyEntity.MySecondEntityID属性且不加载整个MySecondEntity对象甚至没有任何db请求的情况下执行此操作?

小智 8

可以MySecondEntity手动创建对象,并将其作为未更改的对象附加到上下文.

var secondEntity = new MySecondEntity();
secondEntity.Id = id;
context.MySecondEntities.Attach(secondEntity);
entity.SecondEntity = secondEntity;
Run Code Online (Sandbox Code Playgroud)

为了简单起见,我忽略了MySecondEntity在上下文中已经存在具有相同键的对象的可能性.要使其工作,您应该检查本地实体(例如通过搜索context.MySecondEntities.Local)并重新使用实体(如果您在那里找到它).

注意:EF无法知道其他属性(secondEntity保留默认值)与数据库中的属性不对应.对于你现在正在做的事情,这无所谓,但它可能会在稍后阶段发生.