我有下一个实体:
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/