Как правильно выбрать / создать подобъекты с помощью кода MVC / EF? - PullRequest
1 голос
/ 09 мая 2011

Я использую MVC3 с Entity Framework Code First.У меня есть следующая модель.

public class MyObject
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int MySubObjectId { get; set; }

    public virtual MySubObject MySubObject { get; set; }
}
public class MySubObject
{
    public int Id { get; set; }
    public string SubName { get; set; }
}

На моей странице создания для MyObject пользователь может либо выбрать существующий MySubObject для использования, либо создать новый (выбор или создание завершено с автоматическим заполнением текстового поля вшаблон редактирования для MySubObject).

Как правильно обрабатывать это с точки зрения привязки / контроллера.

Должен ли я использовать MySubObject.Id и создать новый объект, если этот Id не являетсядействует?Должен ли я просто использовать MySubObject.SubName и посмотреть идентификатор, когда он будет отправлен обратно в контроллер?

Все, что я придумал, выглядит довольно грязно на стороне контроллера.

Ответы [ 2 ]

0 голосов
/ 14 декабря 2011

ViewBag можно использовать для хранения списка выбора, который затем используется в представлении для раскрывающегося списка.

В контроллере

ViewBag.MySubObjectId = new SelectList(db.MySubObjects, "MySubObjectId", "SubName", model.MySubObjectId);

Тогда в поле зрения

@Html.DropDownList("MySubObjectId", String.Empty)
0 голосов
/ 10 мая 2011

Вы передаете текст, но для построения ваших отношений вам нужен идентификатор, чтобы не было другого способа, кроме как вызвать что-то вроде:

var mySubObject = context.SubObjects.SingleOrDefault(o => o.Name == name);

Если возвращаемое значение является сущностью, вы можете использовать его для построения отношений с существующим подобъектом. Если вы получаете ноль, вы знаете, что должны создать новый подобъект. Простое создание нового экземпляра и присвоение ему свойства навигации основного объекта должно привести к вставке.

Несколько заметок:

  • Если вы хотите сделать это, вы должны определить уникальный ключ для Name подобъекта. EF не поддерживает уникальные ключи, поэтому вы должны сделать это непосредственно в базе данных - для кода сначала используйте пользовательский инициализатор базы данных .
  • Имейте в виду, что чувствительность к регистру при сравнении имен будет основываться на сопоставлении базы данных
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...