Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# EF6-无法解析符号';MapLeftKey';_C#_Entity Framework_Many To Many_Entity_Ef Fluent Api - Fatal编程技术网

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; }
}