我正在使用 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”的Person 记录和一个帐户记录“foo”。我可以很好地查询并取回这些记录。但是,如果我在保存 Person 之前尝试添加帐户,则 Accounts 列表为空(代理尚未在该属性上创建实例)。请参阅下一个示例:
Person doug = context.Persons.CreateObject();
doug.Name = "Doug";
doug.Accounts.Add(new Account() { Name = "foo" }); // throws null reference exception
context.Add(doug);
context.Save();
有没有其他人遇到过这种情况?更好的是,有没有人找到好的解决方案?
最佳答案
Person doug = context.Persons.CreateObject();
doug.Name = "Doug";
context.Add(doug);
doug.Accounts.Add(new Account() { Name = "foo" });
context.Save();
这将工作
关于entity-framework - EF4 POCO 一对多导航属性为空,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2004375/