2015-12-18 2 views
0

я не могу добавить второй один-ко-многим (я бы предпочел ноль-ко-многим) отношение к моему классу ....EF Code First множественным 0-к-многим

I Кроме того, используется структура Entity First. Я также использую одну модель с 4 различными видами. 2 из них должно иметь второе соотношение х-ко-многим с классом А, а другие 2 должны иметь отношение один-ко-многим с классом В. Вот как мои классы выглядят:

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; } 
} 

View, который отображает другой 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; } 
    } 
} 

Я генерировать 4 различные точки зрения на основе Собственость ТипЗапроса. Два представления имеют набор OrderBasic, два других представления должны реализовывать OrderExtended Затем я использую частичный вид для рендеринга свойств модели заказа. Пока я реализую только коллекцию OrderBasic, у меня нет проблем. Когда я добавить модель второго порядка (OrderExtended) я получаю следующую связанную EF ошибку:

An exception of type 'System.ArgumentNullException' occurred in EntityFramework.dll but was not handled in user code. Additional information: Value cannot be null.

Проблемы появляется при попытке отобразить индекс определенного View, даже если это то, что из совершенно несвязанных моделей (Отгрузка в этом случае).

+0

В вашем запросе LINQ что-то пусто. –

+0

Какой запрос LINQ? У меня даже возникли проблемы с загрузкой индекса полностью несвязанной модели. Как только я прокомментирую класс DbSet OrderExtended и список этого класса в моем конструкторе запросов, все хорошо ... Не создаются таблицы. Все отлично работает, когда у меня только один список OrderBasic. – Ciamician

+0

код, который вы предоставили, не может выбрасывать 'System.ArgumentNullException', может отлаживать и выводить точную строку/код, где выбрано исключение. –

ответ

0

Похоже, я нашел преступника. Моя модель содержит файл загрузки:

[DataType(DataType.Upload)] 
    public HttpPostedFileBase Attachment { get; set; } 

показал следующее сообщение об ошибке, как только я попытался добавить миграции:

Value cannot be null. 
Parameter name: entitySet 

HttpPostedFileBase не поддерживается EF. Мне нужно добавить свойство, которое просто хранит ссылку на местоположение файла, вместо сохранения фактического файла в моей БД. Что-то вроде этого:

[NotMapped] 
[DataType(DataType.Upload)] 
public HttpPostedFileBase Attachment{ get; set; } //file to pass to controller 
public string FilePath { get; set; } //reference to file path 
+0

вы можете использовать bytearray для хранения двоичных данных в вашей базе данных. например 'public byte [] AttachmentContent {get; set;}' – Kamyar

Смежные вопросы