我创建了两个具有简单1对多关系的实体。
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为我实例化这个集合。
答案 0 :(得分:1)
好吧,实体框架不会“初始化”任何对象(除了数据库中的数据)。你必须自己做。 EF仅'将其映射到数据库'。
答案 1 :(得分: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还没有在实体上做任何修正。
当您从数据库重新加载此实体时,在上面的示例中,集合不应该为null,因为您似乎正在使用延迟加载。