EF代码优先,如何将派生类映射到表(不包括EF模型中的基类)?

时间:2014-04-11 09:02:37

标签: c#-4.0 inheritance ef-code-first

我有一个包含信息文件夹的表{Id,FileName,Folder,...} - >我们称之为文件

1, Presentation, Work\Presentations
2, CV, Private
3, Report, Work

我需要在treelist控件中表示这些信息。

对于上述数据,它将是这样的:

Work                       //Folder
|->Presentation            //Folder
    |->Presentation        //File
|->Report                  //File
Private                    //Folder
|->CV                      //File

对于这个purpouse,我做了一些课程:

TreeNode
{
    ...some properties

    List<TreeNode> Descendants;
}

File : TreeNode
{
    ...
}

Folder : TreeNode
{
    ...
}

当我从DbContext读取“File”数据时,我在List中生成Folder + File结构,然后将此List作为数据源添加到DevExpress TreeList控件

问题是,我只需要在我的EF模型中包含这个“文件”POCO类,而不需要基类“TreeNode”中的属性

我尝试使用fluent-api为“文件”配置它 - &GT;为继承的TreeNode属性添加Ignore(x =&gt; x ...) - 但结果证明是不允许的 - &GT;然后我试图找到一种方法将TreeNode POCO类标记为“未映射” - 没有成功

然后我认为每个具体的类继承表可能是这个的解决方案(虽然我认为不推荐这种继承类型)

public BaseTypeMapping() //ctor in EntityTypeConfiguration<BaseTypeMapping>
{
    .Map<DerivedType>(m=>
        {
            //commented because I don't need properties from base class in my database
            // m.MapInheritedProperties(); 
            m.ToTable("DerivedTypeTable");
        }
    )
}

在我的DbContext中,我将其定义为:

public DbSet<TreeNode> Files { get; set; }

当我想从DbContext获取所有文件时,我使用它:

var autotexts = context.Files.OfType<File>()ToList();

但是我收到错误“无效的对象名称'dbo.TreeNodes'。”所以我想实体框架也希望这个基类也映射到EF。

有没有办法让这项工作?

0 个答案:

没有答案