【发布时间】:2018-02-15 11:42:01
【问题描述】:
我是第一次使用 EF,在 2 个实体之间建立二对多关系时遇到了麻烦。
这两个实体是“客户”和“订单”。
一个客户有很多订单。 一个订单有两个客户:一个开票客户和一个交货客户。
这是我的模型:
客户
public class Customer
{
[Required]
public int CustomerID { get; set; }
[Required(ErrorMessage = "Le code client est obligatoire.")]
public string Code { get; set; }
[Required(ErrorMessage = "La raison sociale est obligatoire.")]
[StringLength(35, ErrorMessage = "La raison sociale ne peut excéder 35 caractères.")]
public string CompanyName { get; set; }
public bool IsExported { get; set; }
public virtual ICollection<Order> Orders { get; set; }
public virtual ICollection<Address> Addresses { get; set; }
public virtual ICollection<Contact> Contacts { get; set; }
}
订购
public class Order
{
[Required]
public int OrderID { get; set; }
[Required]
[ForeignKey("InvoicedCustomer")]
public int InvoicedCustomerID { get; set; }
[Required]
[ForeignKey("DeliveredCustomer")]
public int DeliveredCustomerID { get; set; }
[Required]
public int PaymentTermsID { get; set; }
[Required]
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:dd-MM-yyyy}", ApplyFormatInEditMode = true)]
public DateTime OrderDate { get; set; }
[Required]
public string OrderRef { get; set; }
public bool IsExported { get; set; }
public virtual ICollection<OrderLine> OrderLines { get; set; }
public virtual Customer InvoicedCustomer { get; set; }
public virtual Customer DeliveredCustomer { get; set; }
public virtual PaymentTerms PaymentTerms { get; set; }
}
我能够创建一个订单,并且在创建时设置了 InvoicedCustomer 和 DeliveredCustomer。
但我无法访问 Customer.Orders,我了解我的做法,EF 认为订单仅属于一个客户,并且该客户未设置为创建订单。
我不想在这些实体之间设置多对多关系,因为一个订单只有 2 个客户。
我正在寻找一种在客户视图中访问 Customer.Orders 的方法,我不知道该怎么做。
我试过这个:
在客户控制器中
var orders = db.Orders.Where(o => o.InvoicedCustomer == customer
|| o.DeliveredCustomer == customer).ToList();
customer.Orders = orders;
在 Views.Customer.Details 中
@foreach (var item in Model.Orders)
{
<div class="row">
<div class="col-md-3">
<dl class="dl-horizontal">
<dt>Référence</dt>
<dd>@Html.DisplayFor(modelItem => item.OrderRef)</dd>
<dt>Client facturé</dt>
<dd>@Html.DisplayFor(modelItem => item.InvoicedCustomer.CompanyName)</dd>
<dt>Client livré</dt>
<dd>@Html.DisplayFor(modelItem => item.DeliveredCustomer.CompanyName)</dd>
</dl>
</div>
</div>
<hr />
}
不幸的是,这不起作用。
假设 InvoicedCustomer 和 DeliveredCustomer 都必须可以访问订单,有什么想法可以访问客户的订单吗?
我希望我的问题很详细。 谢谢!
【问题讨论】:
-
你说这行不通?您是否收到错误或任何异常?这可能是一个问题,因为您指定了 2 个外键并且 EF 可能会感到困惑,但我需要看到错误才能知道 :)
标签: c# asp.net-mvc entity-framework