Я использую VS2010, функцию EF4 CTP (последний выпуск) и объекты POCO, такие как пример ниже:
class Person
{
public int ID { get; set; }
public string Name { get; set; }
public virtual IList<Account> Accounts { get; set; }
...
}
class Account
{
public string Number { get; set; }
public int ID { get; set; }
...
}
Для краткости предположим, что context
ниже — это объект контекста для EF4. У меня есть сопоставление dbml между типами сущностей и базой данных, и я использую его без проблем:
Person doug = context.Persons.CreateObject();
doug.Name = "Doug";
context.Add(doug);
context.Save();
doug.Accounts.Add(new Account() { Name = "foo" });
context.Save(); // two calls needed, yuck
На данный момент в базе данных есть запись о человеке с именем «Doug» и запись об учетной записи «foo». Я могу запросить и вернуть эти записи. Но если вместо этого я попытаюсь добавить учетную запись до сохранения Person, список учетных записей будет пустым (прокси-сервер еще не создал экземпляр для этого свойства). См. следующий пример:
Person doug = context.Persons.CreateObject();
doug.Name = "Doug";
doug.Accounts.Add(new Account() { Name = "foo" }); // throws null reference exception
context.Add(doug);
context.Save();
Кто-нибудь еще сталкивался с этим? Еще лучше, кто-нибудь нашел хорошее решение?