如果我运行下面的代码,我会遇到异常。
为了更新 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) < --> 客户端 (*)