我无法为我的班级添加第二个一对多(我更喜欢零对多)的关系....
我也使用Entity First框架。我还使用了具有4种不同视图的单一模型。 其中2个应该与A类有第二个x-to-many关系,而另外2个应该与B类有一对多的关系。 这是我的课程的样子:
public class Request
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }
...
other properties
...
public virtual ICollection<OrderBasic> Orders { get; set; }
public virtual ICollection<OrderExtended> ExtendedOrders { get; set; }
public Request()
{
Orders = new List<OrderBasic>();
ExtendedOrders = new List<OrderExtended>();
}
}
public class OrderBasic
{
public int ID { get; set; }
...
specific OrderBasic properties
...
public int RequestRefId { get; set; }
[ForeignKey("RequestRefId")]
public virtual Request Request { get; set; }
}
public class OrderExtended
{
public int ID { get; set; }
...
specific OrderExtended properties
...
public int RequestRefId { get; set; }
[ForeignKey("RequestRefId")]
public virtual Request Request { get; set; }
}
查看,根据我想要的特定订单类型呈现不同的PartialView。对BasicOrder类型没有问题。
@model RFP_MVC.Models.Request
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
<legend>General info:</legend>
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
//Request Model properties...
<table class="table table-striped" id="orderTable">
<thead>
<tr>
<th>Material</th>
<th>Quantity</th>
<th>Unit</th>
<th></th>
</tr>
</thead>
<tbody id="OrderZone">
@foreach (var row in Model.ExtendedOrders)
{
Html.RenderPartial("~/Views/Orders/OrderExtendedCreate.cshtml", row);
}
</tbody>
</table>
<button class="btn btn-sm btn-success" type="button" id="addOrder">Add order</button>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Create" class="btn btn-default" />
</div>
</div>
</div>
}
DbContext类:
namespace RFP_MVC.DAL
{
public class DatabaseContext : DbContext
{
public DbSet<Shipment> shipments { get; set; }
public DbSet<Request> requests { get; set; }
public DbSet<OrderBasic> basicOrders { get; set; }
public DbSet<OrderExtended> extendedOrders { get; set; }
}
}
然后我根据一个propery requestType生成4个不同的视图。两个视图具有OrderBasic的集合,另外两个视图应该实现OrderExtended 然后,我使用局部视图来呈现订单模型的属性。 只要我实现OrderBasic集合,我就没有问题。当我添加二阶模型(OrderExtended)时,我收到以下与EF相关的错误:
类型&#39; System.ArgumentNullException&#39;的异常发生在EntityFramework.dll中但未在用户代码中处理。附加信息:值不能为空。
当我尝试显示某个视图的索引时出现问题,即使它是完全不相关的模型的索引(在这种情况下为Shipment)。
答案 0 :(得分:0)
看起来我找到了罪魁祸首。我的模型包含文件上传:
[DataType(DataType.Upload)]
public HttpPostedFileBase Attachment { get; set; }
一旦我尝试添加迁移,就会产生以下错误:
Value cannot be null.
Parameter name: entitySet
EF不支持HttpPostedFileBase。我必须添加一个属性,该属性只存储对文件位置的引用,而不是将实际文件存储在我的数据库中。像这样:
[NotMapped]
[DataType(DataType.Upload)]
public HttpPostedFileBase Attachment{ get; set; } //file to pass to controller
public string FilePath { get; set; } //reference to file path