2010-05-14 53 views
1

时考虑以下ASP.NET MVC控制器代码:防止EF4 ConstraintException调用TryUpdateModel

[HttpPost] 
    public ActionResult Create(FormCollection collection) 
    { 
     string[] whitelist = new []{ "CompanyName", "Address1", "Address2", ... }; 
     Partner newPartner = new Partner(); 
     if (TryUpdateModel(newPartner, whitelist, collection)) 
     {     
      var db = new mainEntities(); 
      db.Partners.AddObject(newPartner); 
      db.SaveChanges(); 
      return RedirectToAction("Details/" + newPartner.ID); 
     } 
     else 
     { 
      return View(); 
     } 
    } 

问题是与实体框架4:例如合伙实体映射到数据库表与它的字段不允许为NULL(这可以通过设计确定 - 它们是必需的)。

不幸的是,当一些属性为空时调用TryUpdateModel会产生尽可能多的ConstraintExceptions不期望的事情!我确实希望TryUpdateModel在这种情况下返回false。

如果不应该,EF不允许将属性值设置为null,但TryUpdateMethod应该处理该属性,并将该错误添加到ModelState错误集合中。

我错了,或者有人搞砸了TryUpdateModel方法的实现?

+0

更新:只有在VS2010下运行mvc应用程序(弹出EF验证例外)时,该问题才会显示。在生产服务器上可以。 任何人都可以帮助如何在我的开发机器上防止这种行为? – twk 2010-05-15 09:54:18

回答

4

这不是“搞砸”了。 It's by design。我处理这个问题的首选方法是绑定到编辑模型,而不是直接绑定到实体。如果这不适合你,那么你可以write an associated metadata provider或初始化属性。

+0

我想知道你是否可以看看类似的问题,我试图绑定到编辑模型/ dto:http://stackoverflow.com/questions/6124251/problems-mapping-a-dto-to- a-ef-4-0-entity-w-mvc2 – 2011-05-25 12:12:59

+0

@kevin,它在我看来像你有一个AutoMapper问题,我不能帮你。抱歉! – 2011-05-25 12:51:00

+0

感谢您抽出宝贵时间。 :) – 2011-05-25 13:17:56