如何将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)的信息,并创建表示这些信息的视图类。据我所知,这是最好的做法,但我对这个铸件感到很抵触。任何帮助都将不胜感激!

如何将EF4.1表类强制转换为派生视图类

如果不需要表中的所有数据,则无需从数据库中传输这些数据。您可以使用:

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只有在重写用于强制转换的运算符时才可能,但它需要具体类型,因为运算符必须创建目标类型的实例。