【发布时间】:2014-10-14 02:22:34
【问题描述】:
我正在使用 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 基元或枚举类型。
【问题讨论】:
-
为什么不直接重命名模型中的类?
-
因为我还想创建分离层:数据访问(tbl_* 自动生成的类)和业务逻辑
-
如果你做了
ToList().Cast<Template>(),这行得通吗? -
不,我收到
Unable to cast object of type 'System.Data.Entity.DynamicProxies.tbl_Templates_BDCB2400F8F15817C025FC5304B7B50595C8747A92C936DFB2D4412FA01BB315' to type 'Project1.Models.Template'.。 -
如果您使用继承,您仍然会将底层对象暴露给客户端。如果您不想这样做,则必须创建一些其他模型(也许是查看模型?)并映射属性。 Automapper 会很好地做到这一点。
标签: c# asp.net asp.net-mvc entity-framework