对于一个表EF 6,具有2个外键的表没有数据

时间:2014-03-05 17:03:00

标签: c# sql entity-framework

ASP.NET。 EF 6.0.2,MVC 5.1.1。 我有一张表有2个外键到同一张表。

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)

它没有显示这两个字段的任何数据。显示了其他字段,也显示了其他外表的其他字段。 有什么想法吗?

1 个答案:

答案 0 :(得分: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);
}