[英]How to use multiple tables with the same foreign key with Entity Framework
我需要定義我的3個類,如下所示:
public class Table1
{
public Guid Table1CoreId {get;set;}
public string Name {get;set;}
public Table2 Table2 {get;set;}
public Table3 Table3 {get;set;}
}
public class Table2
{
Guid Table1CoreId {get;set;}
}
public class Table3
{
Guid Table1CoreId {get;set;}
}
如您所見,我將Table2和Table3定義為Table1中的屬性。
我嘗試使用EF fluent API定義應如何創建它們,但沒有得到想要的結果。 我需要將我的表定義如下:
表格1:
表2:
表3:
表2與表1具有1對1的關系,而表3與表1具有1對M的關系。 表2和表3中的兩個條目都是可選的。
我嘗試了以下操作:在我使用的Table2和3定義類中,我使用了以下內容:
this.HasRequired(t => t.Table1)
.WithMany()
.HasForeignKey(t => t.Table1CoreId)
.WillCascadeOnDelete(false);
但是,當我創建遷移並更新數據庫時,它將在表1中創建其他列:
Table2_Table1CoreId
Table2_Id
Table3_Table1CoreId
Table3_Id
據我所知,所有主鍵和外鍵都是在各個表中創建的,但我只是不希望在Table1中創建這些其他列。
我希望這是有道理的,並且有人可以為我指出正確的解決方法。
在與我的同事進一步討論了這個問題之后,我們最終進一步標准化了我們的表,因此我們引入了一個額外的表,並且還刪除了使其中一個表具有1-to-m關系的要求,因此所有表現在都是一對一 所有這些更改使定義我們的類變得容易得多,也使解決我們的EF問題變得容易得多。
最終更改如下:
public class Table1
{
public Guid Table1CoreId {get;set;}
public string Name {get;set;}
}
public class Table2
{
Guid Table1CoreId {get;set;}
int Table2CoreId {get;set;}
}
public class Table3
{
Guid Table2CoreId {get;set;}
}
public class Table4
{
Guid Table2CoreId {get;set;}
}
在Table2配置類中,我添加了以下內容:
public class Table2Configuration : EntityTypeConfiguration<Table2>
{
...
this.HasOptional(t => t.Table3)
.WithRequired(o => o.Table2)
.WillCascadeOnDelete(true);
this.HasOptional(t => t.Table4)
.WithRequired(o => o.Table2)
.WillCascadeOnDelete(true);
}
現在我們的表如下所示:
表格1:
表2:
表3:
表4:
並且按照最初的要求,表1中沒有添加其他字段。
注意:基於最初的問題,我確實通過將[ForeignKey(“ Table1CoreId,Id”)]屬性添加到Table1中定義的兩個導航屬性(即Table2和Table3)中,設法解決了其他字段問題,但從未解決過在最終重新設計類和表時使用EF Fluent API。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.