У меня есть модель инфраструктуры сущностей (.Net 3.5), которую я использую для извлечения определенного родительского объекта и последующей явной загрузки его связанных объектов.Для определенных родительских объектов связанные объекты не загружаются, даже если они существуют в базе данных.Я удалил объекты из модели и снова добавил их, но это не помогло.Я профилировал базу данных, чтобы увидеть запрос, который на самом деле выполняется.Если я вручную выполню этот запрос, используя тот же логин sql, который использует модель, ожидаемые данные будут возвращены.Опять же, для большинства родительских объектов связанные объекты загружаются просто отлично.Но для некоторых связанные объекты не загружаются.
Еще одна странность для одного из объектов, связанных с проблемой: если я выполняю вставки sql, чтобы вручную создать новую строку в связанной таблице, вызов Load
возвращает только что вставленную строку, но не существующую ранееиз них.Переход на версию 4.0 не вариант для этого кода.Я также пытался использовать .Include("ShippingMethod")
при извлечении родителя, но результат тот же.Кто-нибудь еще сталкивался с этим?
var cust = (from c in context.Customer
where c.CustomerID == customerId
select c).FirstOrDefault();
if (!cust.ShippingMethod.IsLoaded)
cust.ShippingMethod.Load();
cust.ShippingMethod.ToList().ForEach(c =>
custEx.ShippingMethods.Add(new OrderShippingMethodEx()
{
ID = c.ID,
CarrierAccountNumber = c.CarrierAccountNumber,
CarrierPaymentType = (CarrierPaymentType)Enum.Parse(typeof(CarrierPaymentType), c.CarrierPaymentType),
SiteData = c.SiteData,
TransportationMethod = (TransportationMethods)Enum.Parse(typeof(TransportationMethods), c.TransportationMethod)
}));
Если я явно запрашиваю связанный объект (код ниже), вместо загрузки через родительский объект, он работает нормально.Но я чувствую, что это обход реальной проблемы.Я использую Load
во многих других местах, поэтому я волнуюсь, что они могут периодически выходить из строя, но просто не замечены.
var shipMethods = (from c in context.T00107
where c.T00101.CustomerID == customerId
select c);
shipMethods.ToList().ForEach(c =>
custEx.ShippingMethods.Add(new OrderShippingMethodEx()
{
ID = c.ID,
CarrierAccountNumber = c.CarrierAccountNumber,
CarrierPaymentType = (CarrierPaymentType)Enum.Parse(typeof(CarrierPaymentType), c.CarrierPaymentType),
SiteData = c.SiteData,
TransportationMethod = (TransportationMethods)Enum.Parse(typeof(TransportationMethods), c.TransportationMethod)
}));