Общая проблема несовпадения репозитория Linq2Sql - PullRequest
1 голос
/ 22 августа 2009

Я работаю над шаблоном хранилища, где API выглядит следующим образом:

var visitor = repository.Find(x => x.EmailAddress == credentials.EmailAddress &&
                              x.Password == credentials.Password);

где посетитель является объектом домена, а x представляет этот объект домена. Подпись метода для метода Find в хранилище:

T Find(Func<T, bool> query);

Это все замечательно, пока я не попытаюсь использовать это с Linq2Sql, потому что linq2sql создает свои собственные объекты и в результате, когда я хочу вызвать:

context.visitors.FirstOrDefault(query); 

существует несоответствие типов, потому что linq2sql ожидает функцию созданного им типа, а не функцию, которую я передаю.

1 Ответ

1 голос
/ 22 августа 2009

Ну, для начала вам нужно изменить подпись Find на:

T Find(Expression<Func<T, bool>> query);

LINQ to SQL должен иметь логику в виде дерева выражений вместо простого делегата, в противном случае он не может решить, как перевести его в SQL.

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

...