[英]How to add a second foreign key to an EF property which is part of a composite foreign key already
我正在嘗試通過創建該表的副本來創建表的審計跟蹤,該表包含作為主鍵一部分的額外日期。
這是我想要做的簡化示例。
我的實體代碼目前如下:
public class Person
{
[Key]
public int ID { get; set; }
public string Name { get; set; }
public DateTime DateOfBirth { get; set; }
}
public class GiftIdea
{
[Key, Column(Order:0), ForeignKey("Person")]
public int PersonID { get; set; }
[Key, Column(Order:1)]
public DateTime RecordDate { get; set; }
public string Description { get; set; }
public string Occasion { get; set; }
//Linked Entities
public virtual Person Person { get; set; }
}
public class AuditGiftIdea
{
[Key, Column(Order:0), ForeignKey("GiftIdea")]
public int PersonID { get; set; }
[Key, Column(Order:1), ForeignKey("GiftIdea")]
public DateTime RecordDate { get; set; }
[Key, Column(Order:2)]
public DateTime AuditRecordDate { get; set; }
public string Description { get; set; }
public string Occasion { get; set; }
//Linked Entities
public virtual GiftIdea GiftIdea { get; set; }
}
最終,我希望能夠從AuditGiftIdea對象引用Person,而無需通過附加的GiftIdea。
所以我嘗試了這個:
public class AuditGiftIdeas
{
[Key, Column(Order:0), ForeignKey("GiftIdea"), ForeignKey("Person")] //Extra Foreign Key
public int PersonID { get; set; }
[Key, Column(Order:1), ForeignKey("GiftIdea")]
public DateTime RecordDate { get; set; }
[Key, Column(Order:2)]
public DateTime AuditRecordDate { get; set; }
public string Description { get; set; }
public string Occasion { get; set; }
//Linked Entities
public virtual GiftIdea GiftIdea { get; set; }
public virtual Person Person { get; set; } //Access to desired object
}
但是我得到了“Duplicate'OfternKey'屬性的編譯時錯誤”。
我該如何完成此設置?
您無法使用數據注釋執行此操作,因為ForeignKeyAttribute
標記為AllowMultiple = false
。
但您可以使用Fluent API進行配置:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<AuditGiftIdea>()
.HasRequired(t => t.Person).WithMany()
.HasForeignKey(t => t.PersonID)
.WillCascadeOnDelete(false);
base.OnModelCreating(modelBuilder);
}
請注意,您需要關閉級聯刪除,因為新的FK正在創建循環級聯路徑,如果您不這樣做,EF將拋出錯誤。 這反過來意味着您可能在刪除Person
記錄時遇到問題 - 您必須手動從AuditGiftIdea
表中刪除相關記錄。 所以在介紹FK之前要仔細考慮。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.