Шаблон репозитория с использованием LINQ To SQL без созданных моделей - PullRequest
0 голосов
/ 09 июля 2009

Я хочу использовать свои собственные классы Model в шаблоне репозитория. Я не хочу зависеть от классов, которые генерирует LINQ to SQL. Это жизнеспособно? Как мне обработать Where (и другие варианты, когда его Func<MyModel, bool>, но LINQ to SQL хочет Func<LinqToSqlModel, bool>?

Я придумал это, но, возможно, я начинаю перерабатывать это ...

interface IModelConverter<T1, T2>
{
  T2 Convert(T1 item);
  T1 Convert(T2 item);
}

Это слишком большое перенаправление?

Все, что я хочу сделать, это иметь репозиторий MyModel, который может иметь любую реализацию на внутреннем сервере, будь то LINQ to SQL, LINQ to Enities и т. Д. У кого-нибудь есть ресурсы?

Ответы [ 4 ]

2 голосов
/ 09 июля 2009

Я думаю, что вы создаете много накладных расходов здесь. Все классы, которые генерирует Linq to Sql, являются частичными, поэтому, если вы правильно настроите свои пространства имен, вы можете просто расширить эти классы любой нужной вам информацией. И если есть что-то, что вы хотите скрыть, установите его уровень доступа на internal в dbml.

Я действительно не рекомендовал бы полностью переписывать классы.

0 голосов
/ 11 июля 2009

Я решил переключиться на Fluent NHibernate.

0 голосов
/ 09 июля 2009

Если вы хотите, чтобы ваша модель заменила модель linq to sql, вы можете украсить вашу модель атрибутами, что позволит вам в основном определить свою собственную модель, и указать linq to sql, как связать вашу модель с datacontext (который вы надо так же строить)

Пример:

[Table(Name="SomeTable")]
public class SomeClass
{
    [Column(IsPrimaryKey=true, IsDbGenerated=true, AutoSync=AutoSync.OnInsert)]
    internal int MyID {get; set;}

    [Column]
    public String MyString {get; set;}
}

Затем вы можете создать DataContext и сказать ему, как обращаться с вашей моделью следующим образом:

var context = new DataContext(connectionString);
context.GetTable<SomeClass>();
0 голосов
/ 09 июля 2009

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

...