我刚刚从EF6切换到EFCore,但遇到问题时遇到了麻烦。
基本上,我在以前的DbContext中管理着一个多对多关系,但是我认为我现在会陷入困境,看看我是否可以让EF为我工作。< / p>
这是设置
我的应用程序允许用户创建自己的对象。用户创建ObjectType
,然后将ObjectFields
添加到类型中。然后,他们可以创建Objects
中的ObjectType
(例如,带有名称和描述字段的术语)。他们创建了Object
后,可以将其链接到现有系统中的文件夹。
我将Objects
保留在与下面类似的表格中
--------------------------------------------------
| 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 Folder
{
[Key]
public int FolderID { get; set; }
public virtual ICollection<FolderObject> FolderObjects { get; set; }
}
现在,我正在尝试创建一个表,使我能够保持多对多关系,但是当用户创建其自定义对象之一时,它是由多个Object
组成的。< / p>
这是我班上多对多关系的课程:
FolderObject
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
这可能很不正常,我可以像使用EF6一样在同一表中手动管理多对多关系,但是我希望那里的人可能也有类似的情况并找到了解决方案
感谢所有帮助。我可以理解我对设置的解释可能会造成混淆。非常愿意进一步解释。
答案 0 :(得分:0)
将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);