[英]EF Core DbContext Complex Many To Many Relationship
我剛剛從EF6切換到EFCore,但遇到問題時遇到了麻煩。
基本上,我在以前的DbContext中管理着一個多對多關系,但是我認為我現在會放一些硬碼,看看我是否可以讓EF為我工作。
這是設置
我的應用程序允許用戶創建自己的對象。 用戶創建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
組成。
這是我與多對多關系的課程:
文件夾對象
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一樣在同一表中手動管理多對多關系,但是我希望那里的某個人可能也有類似的情況並找到了解決方案。
感謝所有幫助。 我可以理解我對設置的解釋可能會造成混淆。 非常願意進一步解釋。
將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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.