我有2张桌子
class Table1 { }
class Table2
{
...
IEnumerable<Table1> Table1s { get; set; }
}
链接
class Table1To2
{
int Table1Id { get; set; }
int Table2Id { get; set; }
}
如何使用Table2 Include
自动加载Table1s属性?
的 UPD
在尝试时
db.Table2s.Include(d => d.Table1s);
我有例外
指定的包含路径无效。 EntityType 'Models.Table2'
未声明名为'Table1s'
的导航属性。
答案 0 :(得分:0)
EF代码首先不会为定义为IEnumerable
的导航属性生成外键,并且流畅的API不支持HasMany
。
您需要使用ICollection
,我找不到它的MSDN文档,但是对于延迟加载导航,有文档:
表格MSDN
表示关系“很多”结尾的导航属性必须返回一个实现ICollection的类型,其中T是关系另一端的对象类型。
我测试了这两个类:
public class Table1
{
public int Id { get; set; }
public IEnumerable<Table2> Table2s { get; set; }
}
public class Table2
{
public int Id { get; set; }
public string Name { get; set; }
}
以下是迁移中使用的表格(使用EF 6):
CreateTable(
"dbo.Table1",
c => new
{
Id = c.Int(nullable: false, identity: true),
})
.PrimaryKey(t => t.Id);
CreateTable(
"dbo.Table2",
c => new
{
Id = c.Int(nullable: false, identity: true),
Name = c.String(),
})
.PrimaryKey(t => t.Id);
将[{1}}替换为IEnumerable
生成后:
Icollection