LINQ to SQL с шаблоном репозитория - PullRequest
0 голосов
/ 24 октября 2010

В настоящее время я пытаюсь реализовать LINQ to SQL в моем проекте.Я пытаюсь использовать LINQ to SQL с известным шаблоном хранилища.вот что я пытался сделать:

  1. Создать таблицу, например таблицу клиента.
  2. Создать LINQ to SQL (.dbml) для моей таблицы клиента.
  3. Он сгенерировал частичный класс Customer со всеми свойствами и некоторым частичным методом.

После этого мне нужно добавить какой-то пользовательский метод для ex: GetCustomerById (int id), GetCustomerByName (имя строки) и т. Д.Поэтому я создаю частичный класс Customer и реализую все функции, которые мне нужны.

Хммм, на этом шаге я понял, что есть нечто странное, что я не реализовал шаблон хранилища .. T_T

Я пытался создать бизнес-уровень с доступом к уровню хранилища, а затем на уровне хранилища использовать LINQ to SQL в качестве модели данных и доступ к данным на SQL Server.Это лучшая практика?и как добавить шаблон репозитория в мой частичный класс клиента, сгенерированный LINQ to SQL?

Спасибо.

1 Ответ

2 голосов
/ 24 октября 2010

Существует много вариантов шаблона репозитория.Простым определением этого является модуль, который инкапсулирует / скрывает логику персистентности от других компонентов.

Таким образом, вы можете иметь класс с именем LinqToSqlRepository.cs , с методом, подобным так:*

public class LinqToSqlRepository
{
   private YourDataContext _ctx;

   public LinqToSqlRepository()
   {
      _ctx = new YourDataContext();
   }

   public Person GetPersonById(int id)
   {
      return _ctx.Persons.SingleOrDefault(p => p.Id == id);
   }
}

И назовите его из вашего Бизнес-уровня примерно так:

var db = new LinqToSqlRepository();
var person = db.GetPersonById(int id);

В идеале вы не хотите добавлять свой репозиторий в свой частичный класс.Это должно быть отдельно.Ваш класс репозитория должен отработать ваши частичные классы.

Если честно, (IMO) этот тип шаблона проектирования лучше подходит для EntityFramework, чем Linq2Sql, поскольку он предлагает гораздо больше универсальности вусловия POCO.

У Linq2Sql нет способа полностью отключить бизнес-объекты от уровня постоянства.В приведенном выше примере вы возвращаете объект Person , который на самом деле является сущностью в конструкторе L2S, поэтому для пользовательского интерфейса потребуется ссылка на него, что побеждает точку «невосприимчивости».

Однако, как я уже сказал, создайте свой репозиторий отдельно, не помещайте методы в частичный класс, работайте с ними в своем репозитории.

HTH.

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