假设我有一个名为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项目。
完成了很多谷歌搜索,但完全被这个... ...
假设无法做到,最好的替代方法是什么?接口?
杰克
答案 0 :(得分:2)
它不起作用,因为虽然斑马是动物,但并非所有动物都是斑马。当你得到类时,它不知道属于类Zebra的额外方法和属性。如果你可以把它作为Zebra投射,它就会丢失它们。
你可能应该做的是在Zebra上创建一个构造函数,它接受一个Animal并从该Animal生成一个Zebra对象(如果可能的话)。
return dataContext.Animals
.Where( c => c.id == id )
.Select( a => new Zebra(a) )
.SingleOrDefault();
或者,您可以查看使用列鉴别器并使用inheritance mapping将子类加入数据上下文。