0

我创建了两个具有简单的一对多关系的实体。

public class TestEntity
{
    public int Id { get; set; }
    public string Message { get; set; }

    public virtual ICollection<RelatedTest> RelatedTests { get; set; }
}

public class RelatedTest
{
    public int Id { get; set; }
    public bool Something { get; set; }

    public virtual TestEntity TestEntity { get; set; }
}

当我去测试这个时,ICollection导航属性没有被实例化。我无法添加相关实体。

var dataContext = new DataContext();
var testEntity = new TestEntity { Message = "Test message" };
var related = new RelatedTest { Something = true };
testEntity.RelatedTests.Add(related); //fails on this line because RelatedTests is null.
dataContext.TestEntities.Add(testEntity);
dataContext.SaveChanges();

这是预期的功能吗?我必须实例化导航属性吗?我希望 Entity Framework 为我实例化集合。

4

2 回答 2

1

好吧,实体框架不会“初始化”您的任何对象(除了已经在数据库中的数据)。你必须自己做。EF 仅“将其映射到数据库”。

于 2012-09-30T05:13:13.437 回答
1

在你上面的例子中,你可能想要更像

var dataContext = new DataContext();
var testEntity = new TestEntity { Message = "Test message" };
var related = new RelatedTest { Something = true };
testEntity.RelatedTests = new List<RelatedTest>{related};
dataContext.TestEntities.Add(testEntity);
dataContext.SaveChanges();

由于您正在创建基础实体,因此 EF 尚未对实体进行任何修复。

When you reload this entity from the database the collection shouldn't be null in your above example as you appear to be using lazy loading.

于 2012-09-30T06:01:31.273 回答