从实体框架中自动生成的类继承

本文关键字:继承 自动生成 实体 框架 | 更新日期: 2023-09-27 18:26:20

我正在使用MVC 4和实体框架进行一个项目。

我已经用数据库中自动生成的类创建了实体模型。但是,我希望模型中的类有不同的名称和方法。

例如,它是这样生成的:

 public partial class tbl_Templates
    {
        public tbl_Templates()
        {
            this.tbl_Template_Sections = new HashSet<tbl_Template_Sections>();
        }
         public int TemplateId { get; set; }
         //...
    }

但是我不想使用这个类,所以我在建模器中创建了自己的类:

public class Template : tbl_Templates
{
    public Template()
        : base()
    {
    }
    // I'll add custom methods later
}

现在,我如何在控制器中使用这个?

我试过了:

  List<Template> Templates =db.tbl_Templates.Cast<Template>().ToList();

但我得到了一个例外:

LINQ to Entities仅支持强制转换EDM基元或枚举类型。

从实体框架中自动生成的类继承

您需要SelectTemplate并映射所有属性。像这样的

List<Template> Templates = db.tbl_Templates.Select(x => new Template { 
                                                            .TemplateID = x.TemplateID 
                                                   }).ToList();

如果两种类型具有相同的特性名称,则可以使用AutoMapper自动执行此操作。他们有关于如何使用可查询扩展的文档。这是的样本

Mapper.CreateMap<tbl_Templates, Template>();
List<Templates> Templates = db.tbl_Templates.Project().To<Template>().ToList();