2012-02-29 48 views
1

我通過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的錯誤消息不是非常具體,導致我瘋狂追逐。

感謝您的期待。

回答

1

此錯誤說明某些OrderId屬性(例外應包含有關實體或發生此情況的關係的信息)映射爲存儲生成=它具有DatabaseGeneratedOption設置爲IdentityComputed。如果問題與OrderAddress實體有關,請嘗試將此添加到您的映射定義中:

modelBuilder.Entity<OrderAddress>() 
      .Property(x => x.OrderId) 
      .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None); 
+0

我試過這個沒有成功。有關尋找更多信息的例外情況的任何提示?我在調試器中搜尋了異常,並找不到任何將我引向根實體或關係的東西。 – ctorx 2012-03-01 13:16:02

+0

你有其他實體與'Order'有關係嗎?你的數據庫是否真正配置正確(包括關係的方向)? – 2012-03-01 13:23:48

+0

我確實有其他實體使用Order,但沒有使用組合鍵。我已驗證了訂單表上的所有關係...所有內容均顯示訂單爲主鍵表。我能夠推斷異常中的列OrderID是Order實體的屬性。 – ctorx 2012-03-01 13:27:40