与两个相同类型的实例的实体关系

时间:2013-09-18 01:06:36

标签: c# entity-framework orm entity-framework-5 change-tracking

我有以下型号:

Entity Model

在数据库中,假设我有用户管理员和由该用户管理员创建和修改的工件。

Data row

下面的代码不起作用,我想知道到底发生了什么,我怎么能让它工作? 重要提示:当工件由不同的用户创建/编辑时,它就像魅力一样。

using (var context = new ModelEntities())
{
    //Get an artifact created and edited by the user Administrator
    var artifact = context.Artifact
                          .AsNoTracking()
                          .First(a => a.Name == "Artifact created/edited by the same user");

    var createdUser = artifact.CreatedBy;
    Console.WriteLine("{0} created.", createdUser.Name); // Administrator created.

    var modifiedUser = artifact.ModifiedBy;
    Console.WriteLine("{0} modified.", modifiedUser.Name); // Administrator modified.

    context.Set<Artifact>().Attach(artifact); // **Exception! An object with the same key already exists in the ObjectStateManager. The ObjectStateManager cannot track multiple objects with the same key.**

    artifact.Name = "New Name";

    context.Entry(artifact).State = EntityState.Modified;
    context.SaveChanges();
}

在两个不同的导航属性中拥有两个相同类型的实体似乎是一个实体框架限制。

请注意,我尝试尽可能简单地创建此示例,删除业务规则通常需要的明显字段(如创建和修改的日期时间)。

0 个答案:

没有答案