Я пытаюсь внедрить систему медиатек, и я начал свой проект с POCO. Я планирую отделить фактический доступ к данным от объекта, чтобы я мог сохранить тот же объект в XML или SQL.
Что у меня есть в дизайне:
public abstract class MediaBase {}
public class Image : MediaBase {}
public class Movie : MediaBase {}
public class Document: MediaBase{}
... // more classes inherits from base
Как видите, изображение / фильм наследуется от класса Media Base. Моя проблема с дизайном базы данных, для изображений и фильмов, они имеют общие свойства (в базовом классе) и некоторые необычные свойства. Как мне реализовать это в базе данных?
У меня есть два варианта:
- Используйте разные таблицы для изображений и фильмов.
- Используйте одну таблицу для хранения общих свойств и используйте поле MediaType (int) в db, чтобы различать тип.
Но проблема, например, в том, что если я хочу получить все изображения, LINQ будет:
from m in Repository.GetMedia
where m is Image
select m;
Это не будет работать, даже если это так, я сомневаюсь, что LINQ действительно загрузит все данные из базы данных, прежде чем сможет выбрать определенный тип. Я что-то здесь упускаю?