我使用VS2010,EF4功能CTP(最新版本),以及POCO对象,如下面的例子:EF4 POCO一对多导航属性为null
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 = context.Persons.CreateObject();
doug.Name = "Doug";
doug.Accounts.Add(new Account() { Name = "foo" }); // throws null reference exception
context.Add(doug);
context.Save();
有没有其他人遇到过这个?更好的是,有没有人找到一个好的解决方案?
我已经编辑我的问题澄清,我不是问的构造方案,但'context.Persons.CreateObject();'行为。我的困惑是,如果框架在保存对象后要“拥有”那些导航属性,为什么它在创建实体实例时不这样做?我将集合初始化放在我的实体的构造函数中没有问题,但是如果框架期望这些集合是'null',那么看起来我将该对象置于坏状态。 – 2010-01-05 19:33:33