Я создал базу данных, используя конструктор edmx в проекте ASP.NET MVC. У этого есть несколько таблиц как это:
- Офис может иметь много мест
- В каждой локации может быть много сотрудников
- У каждого местоположения есть тип местоположения
- У каждого местоположения есть тип бизнеса
- Каждая локация имеет версию браузера
- Каждая версия браузера имеет браузер
Подробности этого, вероятно, не важны. Базовый класс - Staff
, у него есть свойство Location
, которое имеет свойство Office
, свойство LocationType
, свойство BusinessType
и свойство Browser Version
(которое имеет свойство Browser
) .
Я создаю регистрационную форму. Я начал с попытки создать экземпляр сотрудника для сохранения с помощью кода, подобного staffMember.Location.LocationType = DB.Locations(l => l.Id = model.Id);
который заполнил класс полностью заполненными экземплярами класса. Вызов метода save в этот момент может привести к:
Объекты в DBContainer.BrowserVersions участвуют в
Отношение BrowserBrowserVersion. 0 связанных "Браузеры" были найдены.
Ожидается 1 «Браузеры».
Теперь снова класс BrowserVersion.Browser был заполнен правильно.
Итак, я немного прочитал, и в результате я убедился, что мой код всегда использует один и тот же DBContext. Это не решило мою проблему. Поэтому я изменил свой код, чтобы сделать что-то вроде этого:
staffMember.Location.BrowserType = new BrowserType { Id = myBrowserType.Id };
Это может привести к ошибке вроде:
{"Невозможно вставить значение NULL в столбец 'BrowserName', таблица
'MyProject.dbo.Browsers'; столбец не допускает пустых значений. ВСТАВИТЬ
не удалось. \ r \ nОпределение завершено. "}
В итоге я обнаружил, что не могу использовать объекты, скопированные из моего DBContext, но мне нужно создать объекты, у которых все соответствующие свойства скопированы из объектов, которые я получаю из БД. Конечно, я делаю что-то не так, сейчас я пишу больше кода, чем если бы я использовал хранимые процедуры и свой собственный слой данных?