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