C# 从实体框架中自动生成的类继承
我正在从事一个使用MVC4和实体框架的项目 我已经用数据库中自动生成的类创建了实体模型。但是,我希望模型中的类有不同的名称和方法 例如,它已生成此类: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>();
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();