簡體   English   中英

一對多關系是將關系明確地放在孩子身上

[英]One to many relationship is putting relationship explicitly on child

如果我有以下內容:

class Project
{
    ...
    public virtual IList<URL> URLs {get;set;}
}

class URL
{
    ...
    public virtual Project Project {get;set;}
}

創建的數據庫將ProjectID添加到URLs數據庫表中。

我如何強制實體為我創建關系表,以消除對URL依賴, 而不必聲明一個名為ProjectURL 的新實體, ProjectURL所示:

public class ProjectURL
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int ProjectURLID { get; set; }

    public URL URL { get; set; }
    public Project Project{ get; set; }
}

我目前擁有的是

項目

ProjectID |
---------------------
64        |

網址

URLID     | ProjectID |
---------------------
13        | 64

我要擁有的東西:

項目

ProjectID |
---------------------
64        |

網址

URLID   | 
---------------------
13      | 

Project_URLs

URLID   | ProjectID
---------------------
13      | 64

您將需要為您的URL實體配置映射,以便將其拆分為兩個表。 一個表將是URL,另一個表也將包含其他屬性(例如Project的前向鍵)。 看一下Map方法。

您的映射配置如下所示:

class URLMap : EntityTypeConfiguration<URL>
{
    public URLMap()
    {
        Map(m =>
        {
            m.Properties(p => new {p.ID, p.Project});
            m.ToTable("Project_URLs");
        });
        Map(m =>
        {
            m.Properties(p => new
            {
                p.ID,
                // all other properties separated by ,
            });
            m.ToTable("URLs");
        });
        HasKey(p => p.ID);
    }
}

請注意為兩個表定義相同的主鍵(在上面的示例中,我假設使用ID屬性)。

編輯:在cas中,您不知道如何處理映射配置類。 您必須將此類的實例添加到DbContext.OnModelCreating的重寫中:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Configurations.Add(new URLMap());
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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