如何将EF4.1表类强制转换为派生视图类
本文关键字:转换 派生 视图 EF4 | 更新日期: 2023-09-27 17:59:14
我使用了实体框架,并为我的数据库生成了edmx。生成的模板类表示每个表。我有一个生成的类"Table",我从中复制了它的12个属性中的4个到一个新接口"ITableModel"。
var tables = (from t in db.Tables
orderby t.DateReceived descending
select t).Take(100);
var list = tables.AsEnumerable().Cast<ITableModel>().ToList();
正如您可以推测的那样,强制转换会抛出一个invalidcast异常。这里的目标是删除我需要传递给视图(MVC3)的信息,并创建表示这些信息的视图类。据我所知,这是最好的做法,但我对这个铸件感到很抵触。任何帮助都将不胜感激!
如果不需要表中的所有数据,则无需从数据库中传输这些数据。您可以使用:
public class MyProjection : ITableModel
{
public int SomeField { get; set; }
public string SomeField2 { get; set; }
}
并将您的查询称为:
var list = db.Tables
.OrderByDescending(t => t.DateReceived)
.Take(100)
.Select(t => new MyProjection
{
SomeField = t.SomeField,
SomeField2 = t.SomeField2
})
.ToList();
Cast
只有在重写用于强制转换的运算符时才可能,但它需要具体类型,因为运算符必须创建目标类型的实例。