EntityFramework 4.0: вы можете возвращать различные типы в зависимости от данных в базе данных? - PullRequest
0 голосов
/ 30 апреля 2010

У меня есть таблица медиа в базе данных. У меня также есть интерфейс IMedia.

У меня есть два разных типа медиа, которые реализуют один и тот же интерфейс:

1) AudioMedia
2) PictureMedia

Что мне здесь интересно, так это то, могу ли я использовать EntityFramework (я использую файл EDMX, но у меня есть модели в отдельной библиотеке, с отключенной автоматической генерацией кода), и в зависимости от данных в базе данных выберите какой тип получить (AutioMedia или PictureMedia).

Поскольку они оба реализуют один и тот же интерфейс (возможно, при необходимости он может быть изменен на абстрактный класс), я думаю, что где-то по пути вы могли бы указать, каким классом он должен быть.

Возможно, мне следует указать, что у меня есть класс, который наследуется от ObjectContext для доступа к объектам. Возможно, есть что-то, что можно сделать?

Ответы [ 2 ]

2 голосов
/ 30 апреля 2010

Вы можете использовать наследование: и AudioMedia, и PictureMedia будут наследоваться от общего MediaBase абстрактного класса, представленного таблицей. Элементы, специфичные для AudioMedia и PictureMedia, будут храниться в отдельных таблицах.

Этот метод называется стратегией «таблица на тип» и поддерживается разработчиком Entity Model.

Вы также можете использовать стратегию «таблица на конкретный тип», но я не думаю, что она поддерживается дизайнером (однако она поддерживается Entity Framework)

Проверьте эту ссылку для деталей: http://blogs.msdn.com/adonet/archive/2007/03/15/inheritance-in-the-entity-framework.aspx

2 голосов
/ 30 апреля 2010

У вас есть общее поле идентификатора?

Взгляните на

http://blogs.microsoft.co.il/blogs/bursteg/archive/2007/09/30/how-to-model-inheritance-in-databases.aspx

и

http://blogs.msdn.com/alexj/archive/2009/04/15/tip-12-choosing-an-inheritance-strategy.aspx?CommentPosted=true#commentmessage

Изменение его на базовый класс Abstract почти наверняка упростит моделирование с использованием Entity Framework.

...