C# EF核心DbContext复杂的多对多关系

C# EF核心DbContext复杂的多对多关系,c#,entity-framework,entity-framework-core,many-to-many,C#,Entity Framework,Entity Framework Core,Many To Many,我刚从EF6转到EFCore,我想不出问题的答案 基本上,在我以前的DbContext中,我自己管理着一种多对多的关系,但我想我现在应该投入一些努力,看看是否能让EF为我发挥它的魔力 这是设置 我的应用程序允许用户创建自己的对象。用户创建ObjectType,然后向该类型添加ObjectFields。然后他们可以创建对象类型的对象(例如,带有名称和描述字段的术语)。一旦他们创建了对象,就可以将其链接到现有系统中的文件夹 我将对象保存在一个与下面类似的表中 --------------------

我刚从EF6转到EFCore,我想不出问题的答案

基本上,在我以前的DbContext中,我自己管理着一种多对多的关系,但我想我现在应该投入一些努力,看看是否能让EF为我发挥它的魔力

这是设置

我的应用程序允许用户创建自己的对象。用户创建
ObjectType
,然后向该类型添加
ObjectFields
。然后他们可以创建
对象类型
对象
(例如,带有名称和描述字段的术语)。一旦他们创建了
对象
,就可以将其链接到现有系统中的文件夹

我将
对象
保存在一个与下面类似的表中

--------------------------------------------------
| ObjectID |    ObjectFieldID     | Value         |
--------------------------------------------------
|   1      |       1              | Term One Name |
--------------------------------------------------
|   1      |       2              | Term One Desc |
--------------------------------------------------
|   2      |       1              | Term Two Name |
--------------------------------------------------
|   2      |       2              | Term Two Desc |
--------------------------------------------------
以下是我的课程:

对象

public class Object
{
    [Key]
    public int ObjectID { get; set; }
    [Key]
    public int ObjectFieldID { get; set; }
    public string Value { get; set; }


    public virtual ObjectField ObjectField { get; set; }

    //Object's Folders
    public virtual ICollection<FolderObject> FolderObjects { get; set; }
}
public class FolderObject
{
    public int FolderID { get; set; }
    public Folder Folder { get; set; }

    public int ObjectID { get; set; }
    public ICollection<Object> Object{ get; set; }
}
下面是我如何尝试使用Fluent API配置关系

modelBuilder.Entity<FolderObject>()
            .HasOne<Folder>(fo => fo.Folder)
            .WithMany(f => f.FolderObject)
            .HasForeignKey(fo => fo.FolderID);

///HERE is my issue.... How do I create this relationship?
modelBuilder.Entity<FolderObject>()
            .HasOne<ICollection<Object>>(fo => fo.Object)
            .WithMany();//Error thrown here since the "One" is a Collection
modelBuilder.Entity()
.HasOne(fo=>fo.Folder)
.WithMany(f=>f.FolderObject)
.HasForeignKey(fo=>fo.FolderID);
///这是我的问题。。。。我如何建立这种关系?
modelBuilder.Entity()
.HasOne(fo=>fo.Object)
.有许多()//此处引发错误,因为“一”是集合
这可能是相当不寻常的,我可以继续手动管理同一个表中的多对多关系,就像我使用EF6一样,但我希望有人可能遇到过类似的情况,并找到了解决方案


感谢所有的帮助。我可以理解,我对设置的解释可能会令人困惑。非常愿意进一步解释。

FolderObject
更改为:

public class FolderObject
{
    public int FolderID { get; set; }
    public Folder Folder { get; set; }

    public int ObjectID { get; set; }
    public Object Object{ get; set; }
}
 modelBuilder.Entity<FolderObject>()
        .HasKey(bc => new { bc.FolderID, bc.ObjectID });  

    modelBuilder.Entity<FolderObject>()
        .HasOne(bc => bc.Folder)
        .WithMany(b => b.FolderObject)
        .HasForeignKey(bc => bc.FolderID);  

    modelBuilder.Entity<FolderObject>()
        .HasOne(bc => bc.Object)
        .WithMany(c => c.FolderObject)
        .HasForeignKey(bc => bc.ObjectID);
并将配置更改为:

public class FolderObject
{
    public int FolderID { get; set; }
    public Folder Folder { get; set; }

    public int ObjectID { get; set; }
    public Object Object{ get; set; }
}
 modelBuilder.Entity<FolderObject>()
        .HasKey(bc => new { bc.FolderID, bc.ObjectID });  

    modelBuilder.Entity<FolderObject>()
        .HasOne(bc => bc.Folder)
        .WithMany(b => b.FolderObject)
        .HasForeignKey(bc => bc.FolderID);  

    modelBuilder.Entity<FolderObject>()
        .HasOne(bc => bc.Object)
        .WithMany(c => c.FolderObject)
        .HasForeignKey(bc => bc.ObjectID);
modelBuilder.Entity()
.HasKey(bc=>new{bc.FolderID,bc.ObjectID});
modelBuilder.Entity()
.HasOne(bc=>bc.Folder)
.WithMany(b=>b.FolderObject)
.HasForeignKey(bc=>bc.FolderID);
modelBuilder.Entity()
.HasOne(bc=>bc.Object)
.WithMany(c=>c.FolderObject)
.HasForeignKey(bc=>bc.ObjectID);

文件夹对象更改为:

public class FolderObject
{
    public int FolderID { get; set; }
    public Folder Folder { get; set; }

    public int ObjectID { get; set; }
    public Object Object{ get; set; }
}
 modelBuilder.Entity<FolderObject>()
        .HasKey(bc => new { bc.FolderID, bc.ObjectID });  

    modelBuilder.Entity<FolderObject>()
        .HasOne(bc => bc.Folder)
        .WithMany(b => b.FolderObject)
        .HasForeignKey(bc => bc.FolderID);  

    modelBuilder.Entity<FolderObject>()
        .HasOne(bc => bc.Object)
        .WithMany(c => c.FolderObject)
        .HasForeignKey(bc => bc.ObjectID);
并将配置更改为:

public class FolderObject
{
    public int FolderID { get; set; }
    public Folder Folder { get; set; }

    public int ObjectID { get; set; }
    public Object Object{ get; set; }
}
 modelBuilder.Entity<FolderObject>()
        .HasKey(bc => new { bc.FolderID, bc.ObjectID });  

    modelBuilder.Entity<FolderObject>()
        .HasOne(bc => bc.Folder)
        .WithMany(b => b.FolderObject)
        .HasForeignKey(bc => bc.FolderID);  

    modelBuilder.Entity<FolderObject>()
        .HasOne(bc => bc.Object)
        .WithMany(c => c.FolderObject)
        .HasForeignKey(bc => bc.ObjectID);
modelBuilder.Entity()
.HasKey(bc=>new{bc.FolderID,bc.ObjectID});
modelBuilder.Entity()
.HasOne(bc=>bc.Folder)
.WithMany(b=>b.FolderObject)
.HasForeignKey(bc=>bc.FolderID);
modelBuilder.Entity()
.HasOne(bc=>bc.Object)
.WithMany(c=>c.FolderObject)
.HasForeignKey(bc=>bc.ObjectID);

对象
具有复合键,而不是主键,因此将FK设置为
对象。ObjectID
无效。当执行多对多?
对象
具有复合键而不是主键时,似乎无法将FK设置为复合键,因此将FK设置为
对象。ObjectID
不起作用。在执行多对多操作时,似乎不可能将FK设置为复合关键点?