Я использую VS2010, CTP-функцию EF4 (последний выпуск) и объекты 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
На данный момент в базе данных есть запись Person с именем «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();
Кто-нибудь еще сталкивался с этим? Еще лучше, кто-нибудь нашел хорошее решение?