ASP.NET MVC (MVC2) Лучшие практики при вставке / обновлении данных с использованием слоев Linq to SQL и Repository - PullRequest
2 голосов
/ 24 июня 2010

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

Ситуация, с которой я сейчас сталкиваюсь, касается моих "пользователей"."таблица и моя таблица" OpenID ".Мое приложение позволяет пользователю иметь несколько OpenID, поэтому я отслеживаю их в отдельной таблице.

Пользователи
ID
Имя пользователя

OpenID
ID
UserID
Заявитель идентификатора

У меня есть CRUD-репозиторий для каждой таблицы, а также у меня есть Служба, которая взаимодействует с Репозиторием(одна услуга на репо).

У меня вопрос к добавлению нового пользователя (поскольку обновление будет осуществляться по тому же принципу).Вот варианты, которые у меня в голове.

  1. Попросите UserService вставить нового пользователя, получить идентификатор пользователя и затем вставить новый OpenID, используя UserID
  2. Иметь UserServiceотправьте нового пользователя вместе с ClaimedIdentifier в UserRepository и попросите в хранилище вставить и пользователя, и OpenID (это не очень хорошо подходит для методологии CRUD)
  3. Создать представление для таблицы User итаблицу OpenID, создайте UsersOpenIDRepository и UsersOpenIDService, а затем вставьте в представление.

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

Пожалуйстаобратите внимание, я не использую NHibernate, поэтому я могу смоделировать свой домен, как я считаю нужным.Я придерживаюсь Linq для SQL в этом проекте,

1 Ответ

0 голосов
/ 24 июня 2010

По моему опыту, Linq2SQL не очень хорошо подходит для методологии CRUD. Приспосабливание означает прыгать через слишком много обручей, чтобы действительно стоить этого. Проблема, которую вы описываете, не единственная - она ​​становится еще хуже при обновлении сущностей.

Поэтому я выбрал решение 2 (вставка обеих сущностей в репозиторий пользователей) в моем текущем проекте.

Я также отказался от методов обновления для репозиториев. Unstead мои репозитории просто имеют метод SubmitChanges, который должен вызываться после того, как все обновления выполняются на загруженных объектах. Все репозитории, созданные в одном веб-запросе, используют один и тот же DataContext, поэтому не имеет значения, в каком репозитории я называю Submitchanges. Это не CRUD, но он гораздо лучше подходит для выполнения обновлений базы данных LINQ2SQL.

Если вы действительно абсолютно хотите чистый CRUD, вы можете проверить EF с помощью шаблона генерации сущности POCO.

...