1
我有兩個班,像這樣:如何使用實體框架代碼優先映射具有複合鍵的繼承表?
public class Customer {
public string Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
public class CustomerChange : Customer {
public DateTime ChangedAtUtc { get; set; }
}
我試圖將它們映射到使用實體框架代碼優先數據庫模式。該模式應該是這樣的:
+-------------+
| Customer |
+-------------|
| * Id |
| FirstName |
| LastName |
+-------------+
|
|
/|\
+----------------+
| CustomerChange |
+----------------+
| * Id |
| * ChangedAtUtc |
| FirstName |
| LastName |
+----------------+
所以Customer
表列出了每一個客戶的最新狀態,每一次客戶的變化,我們UPDATE
Customer表和INSERT
一行到CustomerChange表。 CustomerChange爲您提供了該客戶記錄狀態的完整歷史記錄 - 請注意,在此模型中CustomerChanges應被視爲不可變。
我已經嘗試在Customer.Id和CustomerChange.ChangedAtUtc屬性上放置[Key]
屬性,但這不起作用。我試着明確壓倒一切的OnModelCreating:
modelBuilder.Entity<CustomerChange>().Map(m => {
m.MapInheritedProperties();
m.ToTable("CustomerChanges");
}).HasKey(change => new { change.Id, change.ChangedAtUtc });
,但我不能讓EF與複合鍵(id,ChangedAtUtc)創建CustomerChanges表
(是的,在這個例子中,我依靠這是好的。)
我應該如何裝飾/覆蓋各種實體框架位來正確創建此表?