Скажем, у меня есть две сущности:Как Entity Framework 5 исполняет создание/обновление, когда есть отношение
public class Menu
{
//other properties..
public virtual ICollection<SubMenu> SubMenus { get; set; }
}
и второй объект:
public class SubMenu
{
//other properties..
public int MenuID { get; set; }
public virtual Menu Menu { get; set; }
}
как же EF 5
продолжает отслеживать на отношения между субъектами и что мне нужно передать, чтобы выполнить операции Create/Update?
Существует несколько примеров сценариев, в которых я не уверен, что мне нужно, и что мне не нужно было передавать в качестве значений, чтобы дать EF 5
достаточно информации для выполнения задачи.
Например:
- Создание меню и подменю одновременно
Допустим, я представил форму с данными для нового Menu
содержащего SubMenu
, что я хочу сохранить мой база данных. Мой код будет что-то вроде:
Menu menu = new Menu();
menu.Name = model.Name;
menu.Description = model.Description;
//and so on..
затем в подменю я что-то подобное:
SubMenu subMenu = new SubMenu();
subMenu.Name = model.sub.Name;
subMenu.Image = model.sub.Image;
subMenu.Menu = //The menu does not exist yet...
subMenu.MenuID = //I don't have Menu so no ID either
как именно EF 5
работает в этом сценарии? Как следует действовать для создания записей в Menu
и SubMenu
?
- Создание субменю для существующего меню
Второй сценарий, который меня смущает, когда я должен создать новую запись, которую я должен относиться к существующим Menu
. Опять мой код выглядит примерно так:
SubMenu subMenu = new SubMenu();
subMenu.Name = model.sub.Name;
subMenu.Image = model.sub.Image;
subMenu.Menu = //hmm?
subMenu.MenuID = //hmm?
В этом случае я уже существующий Menu
таким образом я могу получить оба - точные Menu
объект для этого SubMenu
или просто MenuId
. Когда я смотрю на subMenu
лица, если я прохожу весь Menu
объект как:
subMenu.Menu = меню // здесь меню экземпляр
Menu
Я могу видеть, что теперь subMenu.Menu
держит все свойства объекта, включая MenuId
, нужно ли мне его предоставить? subMenu.MenuId = menu.MenuId
? Как EF 5
делает отношение и что именно мне нужно предоставить?
я сделал (я признаю, - быстро) исследования и не смогли найти модель с 'нулевым object' в это имя, не говоря уже о связанных с каким-то' 'EF5' и Code First '. Есть ли другая причина для: 'public Menu() { SubMenus = новый Список(); } 'за тем, как можно использовать расширения для' List', например '.Add()'? –
Leron
Публичный/виртуальный - это еще один вопрос ... –
@philsoady Я не прошу о ленивой загрузке и тому подобное, но в чем разница между созданием экземпляра коллекции в самой сущности или после «Меню меню = новое меню(); а затем 'menu.SubMenu = новый список();'. Я видел пример людей, делающих это в сущности, но я не вижу разницы между созданием экземпляра в коде и его экземпляром в сущности, за исключением, конечно, оптимизация для написания одного и того же кода только один раз. Но я спрашиваю, есть ли другие причины этого очевидного. –
Leron