Существует много вариантов шаблона репозитория.Простым определением этого является модуль, который инкапсулирует / скрывает логику персистентности от других компонентов.
Таким образом, вы можете иметь класс с именем 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.