entity-framework - EF4 POCO 一对多导航属性为空

标签 entity-framework poco entity-framework-4 navigation-properties

我使用的是 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 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/

相关文章:

c# - MVC 5 - 如何首先使用 EF 代码更新关系表

C#、 Entity Framework 、自增

使用 Poco 库的 C++/IOS Websockets

c# - 可以更新 POCO 实体中的相关属性(如触发器)吗?

entity-framework-4 - EF4 CodeFirst CTP5 nvarchar(max) 通过属性

c# - 删除可选相关实体时如何将 FK 更新为 null

c# - C# 模型的自定义 setter

model-view-controller - Entity Framework 和缓存 - 更改会追溯到缓存

entity-framework-4 - 可以从 View 中使用 `System.Data.Objects.SqlClient.SqlFunctions` 吗?

entity-framework - 从 Entity Framework Code First 从开发迁移到生产