无法基于LINQ-2-SQL对象转换部分类

时间:2011-03-28 12:19:01

标签: asp.net-mvc linq-to-sql partial

假设我有一个名为Animals的数据库表,我将其拖到我的Linq-2-SQL DBML文件中。

这创建了一个名为Animal的类。

然后我创建了一个扩展它的类,如下所示:

public partial class Animal{
 //my extra code here
}

但我还想做的是这样的课程:

public class Zebra : Animal{
 //even more extra code here
}

麻烦的是,当我这样做时,我从我的存储库中得到一个InvalidCastException:

Animal a = dataContext.Animals.Where(c=>c.id.Equals(id)).SingleOrDefault();
return (Zebra)a;

我已经把我的班级剥离到了他们完全为空的地方,试图解决为什么它不起作用。无济于事。

这个转换过程曾经用于我正在切换到MVC / LINQ的非LINQ-2-SQL项目。

完成了很多谷歌搜索,但完全被这个... ...

假设无法做到,最好的替代方法是什么?接口?

杰克

1 个答案:

答案 0 :(得分:2)

它不起作用,因为虽然斑马是动物,但并非所有动物都是斑马。当你得到类时,它不知道属于类Zebra的额外方法和属性。如果你可以把它作为Zebra投射,它就会丢失它们。

你可能应该做的是在Zebra上创建一个构造函数,它接受一个Animal并从该Animal生成一个Zebra对象(如果可能的话)。

return dataContext.Animals
                  .Where( c => c.id == id )
                  .Select( a => new Zebra(a) )
                  .SingleOrDefault();

或者,您可以查看使用列鉴别器并使用inheritance mapping将子类加入数据上下文。