Entity Framework: Не должно ли присоединение следующего объекта генерировать исключение? - PullRequest
0 голосов
/ 15 ноября 2011

Насколько я могу судить, EntityCollection.Attach и EntityReference.Attach могут создавать только те отношения, которые уже существуют в базе данных.Другими словами, если Address.EmployeeID == Employee.EmployeeID, то будет работать следующий код:

        Employee employee = context.Employees.First();
        Address address = context.Addresses.First();
        employee.Addresses.Attach(address);

Но если Address.EmployeeID != Employee.EmployeeID, то код сгенерирует исключение:

        Employee employee = context.Employees.First();
        Address address = context.Addresses.First();
        employee.Addresses.Attach(address); // System.InvalidOperationException: A 
                                            // referential integrity constraint
                                            // violation occurred

Но согласнок примеру кода, взятому из следующих thread , EntityCollection.Attach и EntityReference.Attach, также можно использовать для создания отношений, которые не существуют в БД:

var existingPerson = ctx.Persons.SingleOrDefault(p => p.Name = "Joe Bloggs" };
var myAddress = ctx.Addresses.First(a => a.PersonID != existingPerson.PersonID);
existingPerson.Addresses.Attach(myAddress);
// OR:
myAddress.PersonReference.Attach(existingPerson)
ctx.SaveChanges();

ТакПравильно ли я предположить, что EntityCollection.Attach и EntityReference.Attach могут создавать только те отношения, которые уже существуют в базе данных, и как пример кода, взятый из другого потока, должен вызвать исключение?

Спасибо

1 Ответ

1 голос
/ 18 ноября 2011

Да, я думаю, это просто опечатка или автор написал что-то неполное.

var existingPerson = ctx.Persons.SingleOrDefault(p => p.Name = "Joe Bloggs" };
var myAddress = ctx.Addresses.First(a => a.PersonID == existingPerson.PersonID);
existingPerson.Addresses.Attach(myAddress);
// OR:
myAddress.PersonReference.Attach(existingPerson)
ctx.SaveChanges();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...