Платформа объекта и Моделирование Наборов с Интерфейсом как тип возврата

Я использую Платформу Объекта v4. Я создал ПОСТЕПЕННО класс, который содержит набор скалярных свойств и набора, который возвращает Интерфейсный тип. Как я создаю эти отношения в модели EF? Как я показываю набор, который содержит различные объекты, но у них всех есть единый интерфейс? Вот был бы пример того, чего я пытаюсь достигнуть.

interface IPatientDocument{}
public class Lab : IPatientDocument{.....}
public class Encounter : IPatientDocument{...}
public class MedicationLog : IPatientDocument{...}

//Incomplete class listing
//Once I have aggregated the different doc types, I can then use Linq to Obj to retrieve the specific doc type I need.  Currently I have about 26 doc types and do not want to create a collection for each one
public class Patient
{
   IList<IPatientDocument> DocumentCollection;
}
6
задан William 7 April 2010 в 18:57
поделиться

2 ответа

Я не знаю, полностью ли это законно. Если бы вы могли реализовать использование базового класса, вы, вероятно, выполняли бы наследование таблиц по типам, что разрешено. Но если вы просто пытаетесь выбрать произвольные типы, вы сталкиваетесь с ко- и противоречивостью, что, возможно, стоит изучить, поскольку это нововведение в .NET 4.

0
ответ дан 17 December 2019 в 18:12
поделиться

Будьте очень очень осторожны, если вы используете наследование TPT (Table-Per-Type) в Entity Framework. Особенно если у вас 26 типов документов. Я написал статью в блоге о неработающей генерации SQL для наследования TPT, а также открыл ошибку на Microsoft Connect. MS признала наличие проблемы, и они говорят, что работают над ней, но не задерживайте дыхание. Им потребовалось 3 месяца, чтобы признать проблему, и все, что они сказали: "Мы знаем о проблемах производительности с иерархиями TPT. В настоящее время мы изучаем решения и ожидаем улучшений в этой области в одном из будущих релизов".

С 26 типами документов, даже при базовом запросе, потребуется около 2 минут, чтобы EF сгенерировал SQL (а это около 8000 строк), а SQL Server обработал его. Вы будете на 30 уровней глубже в нелепых подзапросах. Избегайте наследования TPT любой ценой. Если вы только начинаете приложение, кажется, что это работает, потому что у вас обычно всего несколько подтипов, но как только вы добавите больше, ваше приложение начнет тормозить.

3
ответ дан 17 December 2019 в 18:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: