2

如果我运行下面的代码,我会遇到异常。

为了更新 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) < --> 客户端 (*)

4

1 回答 1

0

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

ClientUser client = _myObjectContext.CreateObject<ClientUser>();
于 2011-12-07T08:56:05.397 回答