【问题标题】:Entity Framework (C# ASP.NET) - Association Entity without Tracking in Non-Dependent Entity实体框架 (C# ASP.NET) - 在非依赖实体中没有跟踪的关联实体
【发布时间】:2017-03-15 09:33:29
【问题描述】:

我有两个要使用实体框架创建的模型类:技能和活动。以下是每个的定义:

技能.cs

public class Skill
{
    public int Id { get; set; }
    public String Name { get; set; }
}

Activity.cs

public class Activity
{
    public int Id { get; set; }
    public String Name { get; set; }
    public virtual List<Skill> RequiredSkills { get; set; }
}

理想情况下,在数据库中,我希望 Activity 通过外键链接到关联实体(例如 SkillActivityAssoc),并且 Skill 不必对它做任何事情。我不需要跟踪哪些活动需要某种技能。我只需要跟踪每个活动需要哪些技能,从而解释为什么我在技能类中没有列表。我希望这是有道理的。

我的问题是:这样做是否正确?当我通过以下方式更新 Activity 的 RequiredSkills 属性时:

 activity.RequiredSkills = someInstanceOfRequiredSkillsList;
 dbcontext.Entry(activity).State = EntityState.modified;
 dbcontext.SaveChanges();

..,它不起作用。我已经推测这是因为我无法更新关联实体。此外,我当前的实现在我想摆脱的 Skill 类中有一个 virtual List&lt;Activity&gt; 属性。如何更改我的模型设计以及如何相应地更新RequiredSkills

提前感谢您!

【问题讨论】:

    标签: entity-framework


    【解决方案1】:

    virtual 用于延迟加载和跟踪 EF 中的更改。您可以在此处阅读更多信息:Understanding code first virtual properties。您还应该阅读有关在 EF 中加载实体的 MSDN 文档:https://msdn.microsoft.com/en-us/library/jj574232(v=vs.113).aspx

    由于您希望在每个活动中拥有多个技能,并且每个技能也可以在多个活动中,因此您具有多对多关系。请阅读此示例:How to create a many-to-many mapping in Entity Framework? 和此 http://www.entityframeworktutorial.net/code-first/configure-many-to-many-relationship-in-code-first.aspx

    【讨论】:

    • 非常感谢您的回答。但是,是否可以在没有引用使用它的活动的情况下创建这种多对多关系?意思是,我可以让 Activity 具有 Skills 的导航属性,但 Skills 没有跟踪其链接的活动吗?
    • 是的,你可以拥有。因为 EF 中的集合属性是导航属性。请在此处阅读更多信息:stackoverflow.com/questions/16718699/… 和 MSDN 文档:msdn.microsoft.com/en-us/library/jj713564(v=vs.113).aspx
    • 再次非常感谢您的回答! :)
    猜你喜欢
    • 1970-01-01
    • 2011-08-28
    • 2017-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-30
    • 1970-01-01
    相关资源
    最近更新 更多