我正在使用的对象图基本上是:
public class Resource
{
public string Forename { get; set; }
public string Surname { get; set; }
public int EmployeeNumber { get; set; }
public ICollection<Skill> Skills { get; set; }
}
public class Skill
{
public int SkillId{get; private set;}
public Technology Technology { get; set; }
public SkillCategory Category { get; set; }
public SkillCompetency Competency { get; set; }
}
通过选择现有技术,SkillCategory,SkillCompetency的组合,可以为用户添加新技能。我一直在尝试(并且失败!)使用GraphDiff来阻止EF尝试添加重复的技术,SkillCategory,SkillCompetency记录。 这似乎应该很容易使用GraphDiff实现,但作为一个相对新的EF夫妇,只是发现GraphDiff我正在努力。
有什么想法吗?
答案 0 :(得分:2)
GraphDiff基本上区分了两种关系:拥有和关联。 拥有可以解释为&#34;作为&#34;的一部分。意味着拥有的任何东西都将与其所有者一起插入/更新/删除。 GraphDiff处理的另一种关系是关联,这意味着更新图形时GraphDiff只会更改关系,但不会关联关联实体本身。
回到您的方案:您不想要重复的Technology
,Category
或Competency
个实体,但Skills
只是这些实体的组合,所以重复Skills
很好。要使用GraphDiff对此进行建模,请告诉它将Skills
视为Resource
(拥有 Resource
)和Technology
的一部分,{ {1}}和Category
为Competency
的关联。这样映射如下:
Skill