【问题标题】:How to save the NEW Entity which has parent relation with the Existing Entity?如何保存与现有实体有父关系的新实体?
【发布时间】:2025-11-23 23:15:02
【问题描述】:

如果我运行下面的代码,就会出现异常。

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

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

        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();

解决!!!

我的问题在于关联。

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

管理员 (0..1) 客户端 (0..1)

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

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

管理员 (0..1) 客户端 (*)

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      最近更新 更多