Одата проблема с виртуальными свойствами в EF - PullRequest
1 голос
/ 04 февраля 2012

Дело в том, что у меня есть служба Odata с конфигурацией по умолчанию:

public class Service : DataService<SummumnetFilterContext>
    {
        // This method is called only once to initialize service-wide policies.
        public static void InitializeService(DataServiceConfiguration config)
        {

            config.SetEntitySetAccessRule("*", EntitySetRights.All);
            config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2;

        }
        protected override SummumnetFilterContext CreateDataSource()
        {
           var dataSource = new SummumnetFilterContext();
           dataSource.Configuration.ProxyCreationEnabled = false;
           return dataSource;
        }
    }

И несколько таблиц с такой структурой:

 public class LabTest
    {
        public int ID { get; set; }
        public DateTime ApplicationDate { get; set; }
        public DateTime ReportDate { get; set; }

        public virtual List<LabValue> LabValue { get; set; }
    }
 public class LabValue
    {
        [Required]
        public int ID { get; set; }
        public string Value { get; set; }
        public string Units { get; set; }

        public int LabTestID { get; set; }
        public virtual LabTest LabTest { get; set; } 
    }

Дело в том, чтокогда я пытаюсь извлечь любой LabTest, с его LabValue, используя Odata, List<LabValue> LabValues каждый раз приходит пустым, не нулевым, а пустым.Кто-нибудь может мне с этим помочь?.К моим услугам вы используете EF ofcourse.

1 Ответ

7 голосов
/ 04 февраля 2012

Я полагаю, вы используете службы данных WCF для использования своего канала OData. В таком случае вы должны сообщить службе , что вы хотите, чтобы ваши отношения загружались вместе с основным объектом:

var data = dataServiceContext.LabTests.Expand("LabValues").FirstOrDefault();

Если вы вызываете службу данных вручную через URL, вы должны использовать expand параметр запроса .

Чтобы было понятно - прозрачной ленивой загрузки для сервиса нет. Ленивая загрузка - это функция EF, используемая, когда вы работаете непосредственно с сущностью на том же уровне в контексте текущего контекста EF. Когда вы используете канал OData, скорее всего, вы находитесь не на том же уровне (даже на компьютере), и прозрачная отложенная загрузка не предлагается, чтобы избежать дополнительных сетевых обращений к службе.

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