簡體   English   中英

EF核心DbContext復雜的多對多關系

[英]EF Core DbContext Complex Many To Many Relationship

我剛剛從EF6切換到EFCore,但遇到問題時遇到了麻煩。

基本上,我在以前的DbContext中管理着一個多對多關系,但是我認為我現在會放一些硬碼,看看我是否可以讓EF為我工作。

這是設置

我的應用程序允許用戶創建自己的對象。 用戶創建ObjectType ,然后將ObjectFields添加到類型。 然后,他們可以創建ObjectsObjectType (例如,使用的名稱和描述字段項)。 一旦他們創建了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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM