我正在构建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; }
}
仍然得到同样的例外。 任何想法如何解决它?
答案 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
使用的属性的更多信息