2017-02-05 2 views
0

У меня есть ObjectModel, который содержит, например, 2 класса Student и Course.documentDB с использованием коллекции и документа для объекта

Я хочу использовать documentDB для сохранения этой 2 коллекции (одна коллекция для курсов и одна для студентов) Мне нужно создать 2 разные коллекции в моей документацииDB DB? , Или я могу использовать только одну коллекцию?

Другая проблема, когда я хочу конвертировать из документа в ObjectModel.Student, я не хочу использовать динамическое кастинг (проблема с производительностью в реальном времени).

public static async Task<ObjectModel.Student> GetGroupAsyncByID(string id) 
    { 
     try 
     { 
      Document document = await _client.ReadDocumentAsync(UriFactory.CreateDocumentUri(cDatabaseId, cAllCollections[0], id)); 
      return (ObjectModel.Student)document; // compile error 
     } 
     catch (DocumentClientException e) 
     { 
      if (e.StatusCode == System.Net.HttpStatusCode.NotFound) 
      { 
       return null; 
      } 
      else 
      { 
       throw; 
      } 
     } 
    } 

Мой студент Класс

public class Student 
    { 
     #region Fields 
     [JsonProperty(PropertyName = "id")] 
     public string ID { get; set; } 
     public String StudentName { get; set; } 

} 

Как я могу бросить из Doucment на объект Student?

Спасибо!

ответ

0

DocumentDB является схема-агонистом, и да, вы можете сохранить объект Course и Student в одной коллекции. Чтобы легко определить, к какому классу должен быть применен документ, вы можете определить, например, свойство «Тип» в обоих объектах и ​​1 для объекта «Курс» и 2 для объекта «Студент».

Объект Document реализует контракт с динамикой. Вы можете применить к студенту документ Student s = (динамика). Значение производительности здесь очень минимальное, поскольку документ уже содержит объект PropertyBag объекта JSON, он просто установит свойство «Student» в значение в PropertyBag.

Если вы хотите справиться с этим, ResourceResponse также выставляет необработанный поток, чтобы вы сами могли справиться с десериализацией.

+0

Не уверен, что я предложил бы '1' и' 2' для 'Type', если вы по какой-то причине нормализуетесь (но для меня это кажется преждевременной оптимизацией). Просто пойдите с «Курсом» и «Студентом». –

+0

@ Ming Liu на основе простого теста, динамическое кастинг примерно в 20 раз медленнее, чем статический регулярный C# !!. Кроме того, если я передам все свойства в свой первоначальный тип свойства, это будет очень дорого по значению вычислительного времени (отбрасывается из строки в исходный тип). documentDB не сохраняет документ в двоичном формате (например, mongoDB bson). Могу ли я пропустить что-нибудь? – mak