2014-08-29 3 views
2

Я создаю приложение MVC и пытаюсь использовать aproach для кода при создании объектов и базы данных.Entity Framework Code-First Aproach и ModelValidationException

Я получаю ModelValidationException при запуске кода. (Сообщение: System.Data.Entity.ModelConfiguration.ModelValidationException»произошло в EntityFramework.dll, но не был обработан в пользовательском коде)

Это код:

Контроллер:

public class HomeController : Controller { 
    PhonesDB _db = new PhonesDB(); 

    public ActionResult Index() { 
     var model = from b in _db.ProductList //Exception appears here 
        select b; 
     return View(model); 
    } 
} 

Модели:

namespace SmartPhoneCatalog.Models { 
    public class Products { 
     public int ProductID { get; set; } 
     public string Manufacturer { get; set; } 
     public string Name { get; set; } 
     //... 
    } 
} 

namespace SmartPhoneCatalog.Models { 
    public class PhonesDB:DbContext { 
     public DbSet<Products> ProductList { get; set; } 
    } 
} 

и это вид:

@model IEnumerable<SmartPhoneCatalog.Models.Products> 

@{ 
    ViewBag.Title = "Home"; 
} 

@foreach (var item in Model) { 
    <div> 
     <h4>@item.Name</h4> 
     <div>@item.Price</div> 
     <hr/> 
    </div> 
} 

ли я что-то отсутствует?

Пробовал запускать пустое приложение mvc, а затем шаблон, но имел ту же проблему на обоих.

Замена LINQ на var model = _db.ProductList.ToList(); не помогла. Также попробовал редактирования PhonesDB модели (изменения в жирным):

public **partial** class PhonesDB : DbContext { 
    public PhonesDB():**base("PhonesDB")**{ 
    } 

    **protected override void OnModelCreating(DbModelBuilder modelBuilder) { 
     modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); 
    }** 

    public DbSet<Products> ProductList { get; set; } 
} 

все еще получаю же исключение. Любые идеи, как это исправить?

ответ

4

Это исключение похоже на скрытие реального исключения. Я думаю, что реальное исключение бросают, потому что вы не имеете [Key] атрибут на вашем поле ProductID:

public class Products { 
    [Key] 
    public int ProductID { get; set; } 
    public string Manufacturer { get; set; } 
    public string Name { get; set; } 
    //... 
} 

Here еще некоторая информация об атрибутах, используемых Code First

+0

омг, такое простое решение, я искал его весь день. большое спасибо – arsena

+0

Вы очень рад, рад, что я мог бы помочь! :) –

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