Как сохранить новую сущность, которая имеет родительскую связь с существующей сущностью? - PullRequest
2 голосов
/ 07 декабря 2011

Если я запускаю приведенный ниже код, я получаю исключение.

Чтобы обновить 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();

РЕШИТЬ !!!

Моя проблема в ассоциации.

У меня 0..1 отношения на обоих концах между ClientUser и AdminUser.

Администратор (0..1) <-> Клиент (0..1)

И я уже назначил этого администратора для другого существующего клиента. Затем я попытался создать нового клиента и назначить этого администратора, и это вызовет ошибки.

Я исправил это, изменив отношения, как показано ниже

Администратор (0..1) <-> Клиент (*)

1 Ответ

0 голосов
/ 07 декабря 2011

Если вы используете объекты poco, проблема будет в том, как вы создали ClientUser. Вам необходимо создать нового ClientUser в текущем контексте:

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