У меня есть служба WCF с моделью Entity Framework 4, использующая классы POCO, которые сериализуются и отправляются клиентским приложениям. У меня LazyLoadingEnabled
и ProxyCreationEnabled
установлены на false
, и я использую Linq для Entites, чтобы запросить сущность и вернуть ее через List<>
клиенту. Все идет отлично, когда я не использую Include ():
public List<TBLTable1> GetTBLTable1(string pCode)
{
using (PcFactoryEntities oPcFactoryDB = new PcFactoryEntities())
{
oPcFactoryDB.ContextOptions.ProxyCreationEnabled = false;
oPcFactoryDB.ContextOptions.LazyLoadingEnabled = false;
var oRS = oPcFactoryDB.TBLTable1
.Where(c => c.Code == pCode).ToList();
XmlObjectSerializer serializer = new DataContractSerializer(typeof(TBLTable1));
serializer.WriteObject(new XmlTextWriter(Console.Out) { Formatting = Formatting.Indented }, oRS[0]);
return oRS;
}
}
После запроса Linq я использую сериализатор для имитации процесса сериализации, который происходит, когда класс POCO отправляется клиенту, и я прекрасно работаю. Однако, когда я добавляю Include () для загрузки одного из списка навигации для класса, он начинает сериализацию всего списка навигации Table2
, как если бы для LazyLoadingEnabled было задано значение true, и он продолжает сериализацию, вероятно, всей базы данных !
public List<TBLTable1> GetTBLTable1(string pCode)
{
using (PcFactoryEntities oPcFactoryDB = new PcFactoryEntities())
{
oPcFactoryDB.ContextOptions.ProxyCreationEnabled = false;
oPcFactoryDB.ContextOptions.LazyLoadingEnabled = false;
var oRS = oPcFactoryDB.TBLTable1
.Include("TBLTable2")
.Where(c => c.Code == pCode).ToList();
XmlObjectSerializer serializer = new DataContractSerializer(typeof(TBLTable1));
serializer.WriteObject(new XmlTextWriter(Console.Out) { Formatting = Formatting.Indented }, oRS[0]);
return oRS;
}
}
Почему это происходит? Разве LazyLoadingEnabled со значением false не должен применяться к классу, включенному вручную, и возвращать все его списки навигации в null
, как это происходит со всеми другими списками навигации для Table1
? Есть ли способ исправить это, чтобы я мог вернуться с Таблицей 1 к некоторым спискам навигации, заполненным с их списками навигации, установленными на null
?
Tks