Я работаю над проектом, где нам нужно создавать сложные запросы с службой WCF.Запросить объекты DTO через WCF с linq to sql backend
Служба использует LINQ для SQL в интерфейсе и проекты запросов к объектам передачи данных, как это:
dbContext.GetQueryable() .Where(x => x.Id == formatId) .Select(x => FormatHelper.PopulateMSFormat(x)) .ToList();
То, что я хочу сделать, это указать запрос на стороне клиента, позволяет сказать, что я хочу запрашивать все форматы, имеющие определенное свойство, или пару из них. Что-то в стиле этого:
var assets = client.QueryForAssets().Where(x => (x.name == "Test" || x == "Arne") && x.doe == "john");
Iam известно, что я не могу вернуться IQueryable через WCF, но что-то подобное, что может быть сделано с OData услуг. Проблема в том, что я должен вернуть DTO и OData, что позволяет мне легко привязываться к L2S-datacontext, который предоставляет мою модель данных, а не DTO.
Итак, есть хороший способ сериализации запроса против DTO, который эффективно будет распространяться на уровень l2s?
Я думал о написании собственного языка запросов, но выяснил, что построить правильное дерево выражений как предикат для l2s было бы довольно сложно, так как нет сопоставления из DTO в классы linq.
Это звучит неплохо, но я не могу заставить его работать. Подозреваю, что это связано с тем, что я использую L2S, а не EF –
Найден как минимум две проблемы. Я не могу использовать вспомогательный метод, и поскольку контекст завернут в его использование, он будет удален при запросе коллекции. –
Использование L2S или EF не имеет значения. Вы можете объединить данные из любого источника. Поскольку объекты службы OData создаются «за запрос», правильное использование оператора 'using' является правильным, так как экземпляр класса DataModel будет создан и уничтожен вместе с запросом. –