Entity framework 使用EF 4插入行时违反唯一键约束

Entity framework 使用EF 4插入行时违反唯一键约束,entity-framework,entity-framework-4,Entity Framework,Entity Framework 4,我要插入的对象有一个父对象作为导航属性 当我“添加”要插入的对象时,它还将父对象(已插入)的ObjectStateManager设置为Added,并尝试插入它。我已经在SQL Profiler中验证了它,因此引发了唯一密钥冲突的异常 我用两种方法来解决这个问题 在添加对象之前,我将所有导航属性设置为null 将父对象的ObjectStateManager设置为Modified 但这似乎更像是黑客攻击而不是解决方案。我相信实体框架必须有一些优雅的解决方案 请建议。第二种方法是解决此问题的正确方法。

我要插入的对象有一个父对象作为导航属性

当我“添加”要插入的对象时,它还将父对象(已插入)的
ObjectStateManager
设置为
Added
,并尝试插入它。我已经在SQL Profiler中验证了它,因此引发了唯一密钥冲突的异常

我用两种方法来解决这个问题

  • 在添加对象之前,我将所有导航属性设置为null
  • 将父对象的
    ObjectStateManager
    设置为
    Modified
  • 但这似乎更像是黑客攻击而不是解决方案。我相信实体框架必须有一些优雅的解决方案


    请建议。

    第二种方法是解决此问题的正确方法。调用
    AddObject
    EF时,将在
    Added
    状态下附加对象图中的所有实体。如果图形中还有现有实体,则必须通过将其状态设置为
    Unchanged
    Modified

    来告知EF是否有简单的方法(单步)将所有现有实体设置为Modified/Unchanged状态。而不是对所有导航属性逐个执行。不,但您可以通过附加整个图形并将添加的实体更改为添加的状态来使用反向操作,但这可能会导致添加的关系出现一些问题。