Asp.net mvc 3 EF ComplexType和验证

Asp.net mvc 3 EF ComplexType和验证,asp.net-mvc-3,entity-framework,validation,Asp.net Mvc 3,Entity Framework,Validation,我对EF模型中的验证有一个问题,我似乎不能完全弄清楚。低调的Javascript验证部分按预期工作 考虑以下模型(RequiredIf属性来自: “我的编辑器”视图仅显示用户的字段,这是我的控制器 [HttpPost()] public ActionResult Create(Conversation conversation) { if (ModelState.IsValid) { _db.Conversation

我对EF模型中的验证有一个问题,我似乎不能完全弄清楚。低调的Javascript验证部分按预期工作

考虑以下模型(RequiredIf属性来自:

“我的编辑器”视图仅显示用户的字段,这是我的控制器

    [HttpPost()]
    public ActionResult Create(Conversation conversation)
    {
        if (ModelState.IsValid)
        {
            _db.Conversations.Add(conversation);
            _db.SaveChanges(); // fails on this line
        }
        return RedirectToAction("Index");
    }
这将导致以下错误:

DbUnexpectedValidationException: An unexpected exception was thrown during validation of 'Full name' when invoking Mvc.ValidationToolkit.RequiredIfAttribute.IsValid. See the inner exception for details.
内部的例外是:

Member 'Conversation.Anonymous' not found.

为什么验证突然在寻找
对话.Anonymous
,而不是
对话.Client.Anonymous

您不应该在视图中直接使用您的实体。创建特定于视图的视图模型,然后使用AutoMapper之类的工具将域对象映射到视图模型。将所有必需的、长度等验证放在视图模型上

var model = Mapper.Map<Conversation, ConversationViewModel>(conversation);

return View(model);
var model=Mapper.Map(对话);
返回视图(模型);
var model = Mapper.Map<Conversation, ConversationViewModel>(conversation);

return View(model);