我有下一个实体:

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/

10-12 02:17