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

时间:2011-06-16 14:54:44

标签: c# entity-framework

我使用了Entity Framework并为我的数据库生成了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();

正如你可以猜测的那样,演员抛出了一个无效的广播例外。这里的目标是删除我需要传递给我的视图(MVC3)的信息并创建表示该信息的视图类。从我收集的内容来看,这是最好的做法,但我反对这种铸造的墙。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

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

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