Сейчас я работаю над похожим вопросом. Я сделал следующее:
- Создать следующие сборки:
SF.Contracts - это только что определенные ServiceCotnracts и DataContracts. Очевидно, что все контракты данных могут использоваться как классы POCO в EF (но я не использую t4 или другой генератор - все классы POCO и DataContext написаны вручную, потому что мне нужно использовать очень плохую базу данных ).
SF.
SF.DataAccessObjects - в этой сборке я реализую мои edmx и DataContext.
SF.Services - внедрение служб WCF.
Итак, большое количество методов выбора WCF имеют следующую подпись и реализацию:
public List<Vulner> VulnerSelect(int[] idList = null, string[] navigationPropertiesList = null)
{
var query = from vulner in _businessModel.DataModel.VulnerSet
select vulner;
if (navigationPropertiesList != null)
navigationPropertiesList.Select(p =>{query = ((ObjectQuery<Vulner>)query).Include(p);
return true; });
if (idList != null)
query = query.Where(p => idList.Contains(p.Id));
return query.ToList();
}
и вы можете использовать этот метод следующим образом:
WCFproxy.VulnerSelect(new[]{1,2,3},new[]{"SecurityObjects", "SecurityObjrcts.Problem"});
чтобы у вас не было проблем с сериализацией, свойствами навигации и т. Д., И вы могли четко указать, какие свойства NavigationProperties должны быть загружены.
p.s .: извините за мой плохой английский:)