C# EF6-无法解析符号';MapLeftKey';
我正在尝试映射多对多关系,我在网上找到的每个示例都使用以下语法C# EF6-无法解析符号';MapLeftKey';,c#,entity-framework,many-to-many,entity,ef-fluent-api,C#,Entity Framework,Many To Many,Entity,Ef Fluent Api,我正在尝试映射多对多关系,我在网上找到的每个示例都使用以下语法 protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity<MyObject>() .HasOptional(t => t.ParentObject) .WithMany(t => t.ChildObjects) .Map(m =&g
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<MyObject>()
.HasOptional(t => t.ParentObject)
.WithMany(t => t.ChildObjects)
.Map(m =>
{
m.MapLeftKey("parentId");
m.MapRightKey("childId");
m.ToTable("linkTable");
});
}
如您所见,两个表对一列使用了相同的名称
因此,如果我在数据库中有几条记录,它们会像这样
肌体
表#t01{
边框:1px纯黑;
}
表#t01 tr:n个子项(偶数){
背景色:#eee;
}
表#t01 tr:n个孩子(奇数){
背景色:#fff;
}
表#t01第{
颜色:白色;
背景色:黑色;
}
肌体
描述
1.
汽车
2.
自行车
3.
宾利
4.
宝马
5.
快车
6.
快车
7.
胜利
8.
旧车
9
旧自行车
关系
肌体
MyObjectParentId
1.
无效的
2.
无效的
3.
1.
4.
1.
4.
2.
5.
4.
6.
4.
7.
1.
7.
2.
8.
3.
8.
4.
8.
7.
9
4.
9
7.
这些方法是ManyToManyAssociationMappingConfiguration
的成员,该配置用于设置多对多关联,而不是设置代码中的一对多关联
假设每个MyObject
都有许多ParentObjects
,每个ParentObject
都有许多ChildObjects
,则应该是:
modelBuilder.Entity<MyObject>()
.HasMany(t => t.ParentObjects)
.WithMany(t => t.ChildObjects)
.Map(m =>
{
m.MapLeftKey("MyObjectId");
m.MapRightKey("MyObjectParentId");
m.ToTable("linkTable");
});
modelBuilder.Entity()
.HasMany(t=>t.ParentObjects)
.WithMany(t=>t.ChildObjects)
.Map(m=>
{
m、 MapLeftKey(“MyObjectId”);
m、 MapRightKey(“MyObjectParentId”);
m、 ToTable(“链接表”);
});
教室看起来像什么
public partial class MyObject
{
[Key]
public int Id { get; set; }
public string Desciption { get; set; }
public virtual List<MyObject> ParentObjects { get; set; }
public virtual List<MyObject> ChildObjects { get; set; }
}
公共部分类MyObject
{
[关键]
公共int Id{get;set;}
公共字符串说明{get;set;}
公共虚拟列表父对象{get;set;}
公共虚拟列表子对象{get;set;}
}
如果代码是完整的,请包括整行,.Map…
之前的代码是什么?编辑以显示代码-请注意,我排除了许多其他定义,因为它们纯粹是自动生成的声明,问题不在于语法,因为我可以识别所有其他EF引用-只有MapLeftKey和MapRightKey是正确的提出问题。如果有帮助,VS会提示我输入m.MapKey。您可以为这两个类添加代码吗?根据您的模型类,它不是多对多关系,而是一对多关系。每个对象都有很多子对象,每个对象最多有一个父对象。因此,根据这些表,我的答案中的模型就是您想要的,刚刚将列映射重命名为关系表的列名。为了澄清…这是一个自引用表,另一个表用于存储映射…每个对象可以有0个或多个子对象和0个或多个父对象。。。它是多对多的。如果是,那么`公共虚拟MyObject ParentObject{get;set;}`必须是公共虚拟列表ParentObject{get;set;}好的…这已经很接近了-谢谢Taher。最初的问题是我在我的代码中将ParentObject和ChildObject定义为ICollection-我作为示例发布的代码不是我的实际代码,因为出于各种原因我不想公开显示生产代码,所以我编写了seudo代码。现在我已经将它们定义为列表,我可以选择使用MapLeftKey和MapRightKey。我的下一个问题是两个方面。。。
modelBuilder.Entity<MyObject>()
.HasMany(t => t.ParentObjects)
.WithMany(t => t.ChildObjects)
.Map(m =>
{
m.MapLeftKey("MyObjectId");
m.MapRightKey("MyObjectParentId");
m.ToTable("linkTable");
});
public partial class MyObject
{
[Key]
public int Id { get; set; }
public string Desciption { get; set; }
public virtual List<MyObject> ParentObjects { get; set; }
public virtual List<MyObject> ChildObjects { get; set; }
}