如何使用GraphDiff更新表达式树

时间:2014-03-04 11:15:35

标签: c# entity-framework graphdiff

我正在使用的对象图基本上是:

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我正在努力。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

GraphDiff基本上区分了两种关系:拥有关联拥有可以解释为&#34;作为&#34;的一部分。意味着拥有的任何东西都将与其所有者一起插入/更新/删除。 GraphDiff处理的另一种关系是关联,这意味着更新图形时GraphDiff只会更改关系,但不会关联关联实体本身。

回到您的方案:您不想要重复的TechnologyCategoryCompetency个实体,但Skills只是这些实体的组合,所以重复Skills很好。要使用GraphDiff对此进行建模,请告诉它将Skills视为Resource拥有 Resource)和Technology的一部分,{ {1}}和CategoryCompetency关联。这样映射如下:

Skill