我有两个使用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
?
提前谢谢!
答案 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