Хранение сложных типов в Entity Framework - PullRequest
1 голос
/ 19 марта 2012

Я создал базу данных, используя конструктор 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, но мне нужно создать объекты, у которых все соответствующие свойства скопированы из объектов, которые я получаю из БД. Конечно, я делаю что-то не так, сейчас я пишу больше кода, чем если бы я использовал хранимые процедуры и свой собственный слой данных?

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