2014-03-05 43 views
0

ASP.NET。 EF 6.0.2,MVC 5.1.1。 我有一個表與2個外鍵到同一個表。沒有數據表中有兩個外鍵到一個表EF 6

public class order 
{ 
public int orderID {get;set;} 
public int deliveryplaceID {get;set;} 
public int invoiceplaceID {get;set;} 

public virtual Place Deliveryplace {get;set;} 
public virtual Place Invoiceplace {get;set;} 
} 

對象的保存工作正常,數據庫表中的deliverplaceID和invoiceplaceID已被填充。 現在,當我嘗試顯示數據:

public ActionResult Index() 
{ 
var orderdata = db.order.Include(d => d.Deliveryplace).Include(i => i.Invoiceplace); 
return View(orderdata.ToList()); 
} 

在視圖:

@Html.DisplayFor(modelItem => item.Deliveryplace.Zip) 
@Html.DisplayFor(modelItem => item.Invoiceplace.Zip) 

它不顯示此兩個字段的任何數據。顯示其他字段,也顯示其他外國表的其他字段。 任何想法?

+0

你能實體映射配置代碼添加到這個問題? –

+0

什麼是「實體映射配置」,我必須在哪裏找到它? – Patrick

+0

嗯...也許這是錯誤?我需要在OnModelCreating中做一些代碼嗎? modelBuilder.Entity – Patrick

回答

0

已解決。感謝您的小費JC。你把我放在正確的路上。

溶液
1)定義外鍵,以便表

public class order 
{ 
public int orderID {get;set;} 
public int deliveryplaceID {get;set;} 
public int invoiceplaceID {get;set;} 

[ForeignKey("deliveryplaceID")] 
public virtual Place Deliveryplace {get;set;} 
[ForeignKey("invoiceplaceID")] 
public virtual Place Invoiceplace {get;set;} 
} 

2)定義在modelContext:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
modelBuilder.Entity<order>() 
.HasRequired(c => c.Deliveryplace) 
.WithMany() 
.WillCascadeOnDelete(false); 

modelBuilder.Entity<order>() 
.HasRequired(c => c.Invoiceplace) 
.WithMany() 
.WillCascadeOnDelete(false); 
} 
+0

很高興你的工作。您也可以使用Fluent API指定這些外鍵,而不是使用屬性屬性。功能上相同,但我喜歡保持我的POCO清潔。 –

相關問題