实体框架(C#ASP.NET) - 非依赖实体中没有跟踪的关联实体

时间:2017-03-15 09:33:30

标签: entity-framework

我有两个使用Entity Framework创建的Model类:Skill和Activity。以下是各自的定义:

Skill.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),并且技能不需要对它做任何事情。我不需要跟踪哪些活动需要某种技能。我只需要跟踪每项活动所需的技能,从而解释为什么我在技能课程中没有列表。我希望这是有道理的。

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

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

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

提前谢谢!

1 个答案:

答案 0 :(得分:0)

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