Есть много способов обработать Entity Framework как постоянный слой.
С одной стороны, похоже, что вы не используете чистые POCO.То есть вы позволяете EF генерировать классы для себя (в файле EDMX.designer.cs).
В этом нет ничего плохого, но это препятствует четкому разделению задач (особенно когда речь идет о модульном тестировании).).
Рассматривали ли вы реализацию шаблона репозитория для инкапсуляции вашей логики EF?Это был бы хороший способ изолировать логику от вашего пользовательского интерфейса.
С точки зрения сохранения - это то, где это становится трудным.Вы правы, большинство людей используют частичные занятия.Как правило, у вас есть базовый класс, который предоставляет виртуальный метод «Сохранить», который затем можно переопределить частичными классами.
Лично мне не нравится этот шаблон - я считаю, что POCO не следует заботиться о сохранении, илибазовая инфраструктура.Поэтому мне нравится использовать чистые POCO (без генерации кода), шаблон репозитория и единицу работы.
Единица работы управляет открытием / сохранением / закрытием контекста.
Вот как(моя) Единица Работы делает магию.Рассмотрим этот код в своем проекте "Web":
var uOw = new UnitOfWork(); // this is class i created, implementing the UOW pattern
var person = repository.Find(10); // find's a "Person" entity (pure POCO), with id 10.
person.Name = "Scott";
uOw.Commit();
Или добавление нового персонажа:
var uOw = new UnitOfWork();
var newPerson = new Person { Name = "Bob" };
repository.Add(newPerson);
uOw.Commit();
Насколько это хорошо?:)
В строке 1 создается новый контекст sql для вас.
В строке 2 используется тот же контекст для извлечения одного объекта «Person», который представляет собой код POCO, созданный вручную (не генерируется EF).
Строка 3 меняет имя Person (чистый установщик POCO).
Строка 4 Сохраняет изменения в контексте данных и закрывает контекст.
Теперь, есть еще много для нихшаблонов, поэтому я предлагаю вам ознакомиться с этими шаблонами, чтобы увидеть, подходит ли он вам.
Мой репозиторий также реализован с помощью Generics, поэтому я могу повторно использовать этот интерфейс для сохранения всех бизнес-сущностей.
Также взгляните на некоторые другие вопросы, которые я задавал о переполнении стека - и вы можете увидеть, как я реализовал эти шаблоны.
Не уверен, что это "ответ" вам "ищу, но подумал, что дам вам несколько альтернативных вариантов.