Entity Framework 3.5: - загрузка связанных сущностей не работает для конкретных родителей - PullRequest
0 голосов
/ 14 марта 2012

У меня есть модель инфраструктуры сущностей (.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)

}));

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...