【发布时间】:2010-03-07 19:20:51
【问题描述】:
我有一个创建客户的小应用程序
[Authorize]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult CreateCustomer(GWCustomer customer)
{
if (string.IsNullOrEmpty(customer.CustomerName))
{
ModelState.AddModelError("CustomerName", "The name cannot be empty");
}
//...
if (ModelState.IsValid)
{
//insert in db
}
}
我的问题是GWCustomer 对象有一个Id,它是主键,不能为空。这使得验证框架将其标记为错误。但这不是错误,我还没有创建客户,现在应该是 null 直到它被保存。我该如何绕过这个?或者修复它?
我永远无法将其插入数据库,因为 ModelState 永远无效。
编辑我正在使用 Linq to SQL 和存储库模式。
【问题讨论】:
-
您尚未向我们提供有关您实际验证方式的任何信息。你可能想要包括这个。什么验证框架?验证属性/方法是什么样的?
-
使用 EntityFramework,您可以向模型或 DAO 请求一个新的默认对象,然后填写数据。在 Metske 设计模式中,它被称为“Builder”,而您正在尝试的是“Prototype”。 MVC 可能更喜欢这种方法。
-
您的编辑仍然没有解释任何关于“验证框架”的内容。 Linq to SQL 和存储库模式不是验证框架。 Linq to SQL 是一个对象关系映射器,而存储库模式是一个 CRUD 抽象。这些都不与 ModelState 交互。 ID验证错误实际上来自哪里?什么类/组件?实际验证 ID 的代码行在哪里?
-
验证“框架”是我在代码中向您展示的。我没有做更多的验证。 ID 的错误(据我所知)是由 Linq2Sql dataContext 生成的,因为我的 ID 在 DB 中列为“非空” - 它是一个身份。
-
Linq to SQL 不与 ModelState 交互。实际上必须验证 ID 并调用
AddModelError。您没有向我们展示执行此操作的部分。看起来您甚至没有使用 any 验证框架,而是在控制器中手动进行。那么检查ID属性的代码行在哪里呢?还是您实际上在某个地方遇到了异常?