Inheritance IQueryable管线,具有继承ORM模型

Inheritance IQueryable管线,具有继承ORM模型,inheritance,orm,repository,iqueryable,Inheritance,Orm,Repository,Iqueryable,我正在尝试实现一个媒体库系统,我从POCO开始设计。我计划将实际的数据访问与对象分离,以便将同一对象持久化为XML或SQL 我的设计是: public abstract class MediaBase {} public class Image : MediaBase {} public class Movie : MediaBase {} public class Document: MediaBase{} ... // more classes inherits from base 如您所

我正在尝试实现一个媒体库系统,我从POCO开始设计。我计划将实际的数据访问与对象分离,以便将同一对象持久化为XML或SQL

我的设计是:

public abstract class MediaBase {}
public class Image : MediaBase {}
public class Movie : MediaBase {}
public class Document: MediaBase{}
... // more classes inherits from base
如您所见,图像/电影继承自媒体基类。我的问题是数据库设计,对于图像和电影,它们在基类中有共同的属性和一些不常见的属性。我应该如何在数据库中实现这一点

我有两个选择:

对图像和电影使用不同的表格。 使用一个表来保存公共属性,并在db中使用MediaType int字段来区分类型。 但问题是,例如,如果我想获得所有图像,LINQ将是:

from m in Repository.GetMedia
where m is Image
select m;

即使这样,它也不会工作,我怀疑LINQ是否会在选择特定类型之前从数据库中加载所有数据。我在这里遗漏了什么吗?

不要把LINQ和Mapper混为一谈!使用实体框架,每种类型有更多选项表:

您需要的是提供不同的IQueryalable源。一个用于您的或映射器LINQTO实体,另一个用于MemoryArray

这样的办法应该行得通。Pseodocode

我想,即使这样也不行 怀疑LINQ是否真的可以加载所有 从数据库中删除数据之前,它可以 选择一个特定的类型输出。我是吗 这里漏了什么

不!这取决于您的用户或映射程序。实体框架将完成这项工作

我正计划将实际数据解耦 从对象访问数据,以便 可以将同一对象持久化为XML或 SQL


ADO.NET团队承诺,Entity Framework的.NET 4.0版本将支持对象。对于实际版本,这是不可能的。或者不直接,但那是另一回事。

所以,在设计过程中,我应该从数据库设计开始,然后使用实体框架将数据库映射到对象?不一定。即将推出的实体框架支持模型优先。
public class Repository
{
    private bool UseEntityFrameWork = Properties.Settings.UseEntityFrameWork;

    IQueryalable<MediaBase> Media 
    {
        get
        {
            if(UseEntityFrameWork) return _myEFContext.MediaBase;
            else return _myMemoryArrayOfMediaBase;
        }
    }
}