EF ComplexType и проверка - PullRequest
       4

EF ComplexType и проверка

1 голос
/ 28 декабря 2011

У меня проблема с проверкой в ​​моделях EF, которую я не могу понять.Ненавязчивая часть проверки Javascript работает должным образом.

Рассмотрим следующие модели (атрибут RequiredIf от этой библиотеки ):

public class Conversation
{
    public int Id { get; set; }
    public User User { get; set; }
    public String Handler { get; set; }
}

[ComplexType]
public class User
{
    public bool Anonymous { get; set; }
    [RequiredIf("Anonymous", false)]
    [Display(Name = "Full name")]
    public String Name { get; set; }
}

Только мой редакторпоказывает поля для User, и это мой контроллер.

    [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.

Почему проверка внезапно ищет Conversation.Anonymous, а не Conversations.Client.Anonymous?

1 Ответ

2 голосов
/ 28 декабря 2011

Вы не должны использовать свои объекты прямо в вашем представлении. Создайте модель представления, специфичную для ваших представлений, а затем используйте что-то вроде AutoMapper для сопоставления объектов домена с вашими моделями представлений. Поместите все необходимые проверки, длины и т. Д. В модель представления.

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

return View(model);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...