2015-04-27 2 views
1

Я пытаюсь реализовать DataContractSerializer для создания XML-файла, представляющего нашу довольно сложную объектную модель. Корневой объект имеет несколько свойств ICollection, один из которых имеет несколько свойств ICollection, кратные из которых имеют несколько свойств ICollection ... у вас есть идея.DataContractSerializer с многоуровневыми структурами данных

Я украсил все соответствующие классы [DataContract(Name = "foo")] тегами, прочитал this вопрос об использовании Include() и начал обрамлять его. Когда я собрал верхний слой, я задался вопросом, нужны ли второму слою и явные объявления. Вот то, что я до сих пор:

public void Serialize(string DataCode) 
    { 
     Product prod = context.Products 
      .Include(p => p.Products) 
      .Include(p => p.References) 
      .Include(p => p.Dates) 
      .Include(p => p.Weights) 
      .Include(p => p.Notes) 
      .Include(p => p.Rules) // Rules have PriceConditions, which have Prices... 
      .Include(p => p.DataBooks) 
      .First(m => m.ProductCode == DataCode); 
     FileStream fs = new FileStream(path,FileMode.Create); 
     XmlDictionaryWriter writer = XmlDictionaryWriter.CreateTextWriter(fs); 
     DataContractSerializer serializer = new DataContractSerializer(typeof(Product)); 
     serializer.WriteObject(writer, prod); 
    } 

Итак, мне нужно что-то делать с правилами для того, чтобы гарантировать, что вся структура будет написана, или же Include() знать туннель глубоко в структуру и загрузить каждый элемент?

ответ

1

Вам также необходимо явно включить нижние уровни.

Product prod = context.Products 
    .Include(p => p.Rules.Select(r => r.PriceConditions.Select(p => p.Prices))); 
+0

Что делать, если вы не знаете, сколько уровней вниз структура идет? –

+1

Я пробовал оглядываться, но, похоже, вам нужно было бы явно указать 'Include()' каждое свойство в какой-то момент. Например, см. Http://stackoverflow.com/questions/14512285/entity-framework-is-there-a-way-to-automatically-eager-load-child-entities-wit. Возможно, вы могли бы задать еще один вопрос о том, как охотно загружать всех детей в определенные моменты. – jjj

Смежные вопросы