c# - 在 Entity Framework 中设置只有 id 的导航属性的最佳方法是什么?

标签 c# entity-framework entity-framework-6 navigation-properties

我有下一个实体:

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/

相关文章:

mysql - 如何使用流畅的 api 在 EF6 中映射值对象标识?

c# - 手动打开到 SQLite 数据库的 EntityConnection 会导致 ProviderIncompatibleException

c# - 如何获取用户在 RichTextBox 中编写的文本的 TextRange

c# - 如何使用弹出窗口在 ASP.NET 项目中显示错误消息?

c# - 首先使用 ASP.net EF 5 代码创建表时是否可以为列设置默认值?

c# - 如何在同一个项目中针对netcoreapp2.0和net461

c# - Entity Framework 包含没有关系

entity-framework - EF 4.1 代码第一个 : one-to-many mapping problem

entity-framework - 如果数据库中的记录发生更改,如何更新 dbSet?

entity-framework-6 - Entity Framework 6 反转复合外键的列顺序