如何保存与现有实体具有父关系的新实体?

时间:2011-12-07 07:07:16

标签: c# entity-framework entity entity-relationship navigation-properties

如果我运行下面的代码,我有一个例外。

  

为了更新AssociationSet'x',EntitySet'x'中的相应实体必须在ObjectStateManager中可用。

这是我的代码。无论我是否将客户端添加到Users实体集,我仍然会收到错误。

        MyDBEntities db = new MyDBEntities();
        //create new client entity
        ClientUser client = new ClientUser();
        client.UID = 9;
        client.UserName = "KKL";
        client.CompanyName = "KKL Company";

        //retrieve existing entity
        AdminUser admin = db.Users.OfType<AdminUser>().FirstOrDefault();
        //assign AdminUser of new client to existing admin
        client.AdminUser = admin;

        //db.Users.AddObject(client);
        db.SaveChanges();

我首先尝试保存新实体,然后添加关系并再次保存。但它显示相同的错误消息。 :(

        MyDBEntities db = new MyDBEntities();
        //create new client entity
        ClientUser client = new ClientUser();
        client.UID = 9;
        client.UserName = "KKL";
        client.CompanyName = "KKL Company";

        //first save the new object
        db.Users.AddObject(client);
        db.SaveChanges();

        //retrieve existing entity
        AdminUser admin = db.Users.OfType<AdminUser>().FirstOrDefault();
        client.AdminUser = admin;

        db.SaveChanges();

SOLVE !!!

我的问题是关联的。

我在ClientUser和AdminUser之间的两端都有0..1的关系。

管理员(0..1)&lt; - &gt;客户(0..1)

我已将该管理员用户分配给另一个现有客户端。然后我尝试创建新客户端并分配该管理员并引发错误。

我通过改变下面的关系来修复它

管理员(0..1)&lt; - &gt;客户(*)

1 个答案:

答案 0 :(得分:0)

如果您正在使用poco对象,问题将与您创建ClientUser的方式有关。您需要在当前上下文中创建新的ClientUser:

ClientUser client = _myObjectContext.CreateObject<ClientUser>();