我通過DbContext和Exisiting Database使用EntityFramework。DbContext:依賴屬性/ ReferentialConstraint使用複合鍵時出現異常
當我向我的上下文添加一個Order實體並調用SaveChanges()時,我遇到以下異常:「ReferentialConstraint中的依賴屬性映射到商店生成的列Column:OrderId」。
我相信這是因爲我的OrderAddress表上的組合鍵,我希望有一種解決方法...我不想在該表上創建一個IDENTITY。
這裏有我的實體,簡化...
// OrderId is an IDENTITY PK
public class Order
{
public int OrderId { get; set; }
public IList<OrderAddress> Addresses { get; set; }
public int Total { get; set; }
}
// PK on this table is composite key of OrderId and OrderAddressTypeId
public class OrderAddress
{
public int OrderId { get; set; }
public int OrderAddressTypeId { get; set; }
public string Address { get; set; }
}
這裏是我的背景下,簡化...
public class StoreContext : DbContext
{
DbSet<Order> Orders { get; set; }
DbSet<OrderAddress> OrderAddresses { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
// Set the Identity for Order
modelBuilder.Entity<Order>()
.Property(x => x.OrderId)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
// Set composite key for Order Address
modelBuilder.Entity<OrderAddress>()
.HasKey(x => new { x.OrderId, x.OrderAddressTypeId });
}
}
注:我已經看了其他做題類似於並試圖列出的解決方案沒有成功。我已驗證我的外鍵已在數據庫中正確設置。我的問題有什麼不同是使用組合鍵。
在此先感謝您的幫助。
UPDATE:
這最終沒有被涉及到複合鍵都沒有。我的Context OnModelCreating方法中有一個額外的行,它需要一個子實體OrderSummary,它基於我的數據庫中的View。這條線看起來是這樣的...
modelBuilder.Entity<OrderSummary>().HasRequired(x => x.Order).WithRequiredPrincipal(x => x.OrderSummary);
我從來沒有打算讓OrderSummary成爲Order的必需主體。將其更改爲以下修復問題...
modelBuilder.Entity<OrderSummary>().HasRequired(x => x.Order);
不幸的是,來自EF的錯誤消息不是非常具體,導致我瘋狂追逐。
感謝您的期待。
我試過這個沒有成功。有關尋找更多信息的例外情況的任何提示?我在調試器中搜尋了異常,並找不到任何將我引向根實體或關係的東西。 – ctorx 2012-03-01 13:16:02
你有其他實體與'Order'有關係嗎?你的數據庫是否真正配置正確(包括關係的方向)? – 2012-03-01 13:23:48
我確實有其他實體使用Order,但沒有使用組合鍵。我已驗證了訂單表上的所有關係...所有內容均顯示訂單爲主鍵表。我能夠推斷異常中的列OrderID是Order實體的屬性。 – ctorx 2012-03-01 13:27:40