实体框架代码优先方法和ModelValidationException

时间:2014-08-29 20:39:39

标签: c# asp.net-mvc linq entity-framework

我正在构建MVC应用程序并尝试在构建实体和数据库时使用代码优先的方法。

我运行代码时得到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应用程序然后启动模板,但两者都有相同的问题。

var model = _db.ProductList.ToList();取代LINQ没有帮助。还尝试了修改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; }
}

仍然得到同样的例外。 任何想法如何解决它?

1 个答案:

答案 0 :(得分:4)

该异常似乎隐藏了真正的异常。我的猜测是因为你没有在ProductId字段上有[Key]属性而引发了真正的异常:

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

Here是有关Code First

使用的属性的更多信息