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

C# 从实体框架中自动生成的类继承,c#,asp.net,asp.net-mvc,entity-framework,C#,Asp.net,Asp.net Mvc,Entity Framework,我正在从事一个使用MVC4和实体框架的项目 我已经用数据库中自动生成的类创建了实体模型。但是,我希望模型中的类有不同的名称和方法 例如,它已生成此类: public partial class tbl_Templates { public tbl_Templates() { this.tbl_Template_Sections = new HashSet<tbl_Template_Sections>();

我正在从事一个使用MVC4和实体框架的项目

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

例如,它已生成此类:

 public partial class tbl_Templates
    {
        public tbl_Templates()
        {
            this.tbl_Template_Sections = new HashSet<tbl_Template_Sections>();
        }

         public int TemplateId { get; set; }

         //...
    }
现在,我如何在控制器中使用这个

我试过:

  List<Template> Templates =db.tbl_Templates.Cast<Template>().ToList();
List Templates=db.tbl_Templates.Cast().ToList();
但我有个例外:

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


您需要
选择
一个
模板
,并映射所有属性。像这样的

List<Template> Templates = db.tbl_Templates.Select(x => new Template { 
                                                            .TemplateID = x.TemplateID 
                                                   }).ToList();
List Templates=db.tbl_Templates.选择(x=>new Template{
.TemplateID=x.TemplateID
}).ToList();
如果两种类型具有相同的属性名称,则可以使用自动执行此操作。他们已经了解了如何使用可查询扩展。这是一个样品

Mapper.CreateMap<tbl_Templates, Template>();

List<Templates> Templates = db.tbl_Templates.Project().To<Template>().ToList();
Mapper.CreateMap();
列表模板=db.tbl_Templates.Project().To().ToList();

为什么不重命名模型中的类呢?因为我还想创建独立的层:数据访问(tbl_*自动生成的类)和业务逻辑如果您这样做了
ToList().Cast()
这行吗?不,我得到
无法将类型为“System.Data.Entity.DynamicProxies.tbl_Templates”的对象强制转换为类型为“Project1.Models.Template”。
如果使用继承,则仍然向客户端公开基础对象。如果不想这样做,则必须创建一些其他模型(可能是视图模型?)并将属性映射到其他模型。Automapper会做得很好。
Mapper.CreateMap<tbl_Templates, Template>();

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