2

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

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

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

OpenID
ID
Идентификатор_пользователя
Claimedidentifier

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

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

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

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

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

ответ

0

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

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

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

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

+0

так что это не конец света, чтобы дважды попасть в базу данных на этом вставке? Я беспокоюсь о том, что у меня слишком много бэков. Кроме того, я не полностью продаюсь при переходе на EF, или NHibernate, или что-нибудь в этом направлении ...Это всего лишь еще одна кривая обучения. –

+0

Это, конечно же, не конец света. Если я не ошибаюсь, Linq2SQL переводит этот вид вставки в две вставки и один выбирает, чтобы получить идентификатор из базы данных в любом случае. Что касается EF: я тоже не продаюсь. И это после того, как потратили 1 неделю на оценку EF. Linq2SQL гораздо проще в использовании. Если бы это была не умирающая технология. –