C# 基于代码优先实体框架的继承

C# 基于代码优先实体框架的继承,c#,asp.net-mvc,entity-framework,inheritance,C#,Asp.net Mvc,Entity Framework,Inheritance,只是代码优先实体框架中的继承有一些问题 我使用代码优先模式实现了继承(也就是说,我有一个基类Request,其他类将其子类化NewSpaceRequest) 就功能而言,框架/语言似乎没有提供更多的功能 例如,我希望有一个包含所有请求的列表的视图,根据请求的类型使用不同的文本。我无法找到一个简单的方法来实现这一点,因为我总是必须对请求进行类型转换,这意味着我失去了所有子类功能和告诉我拥有什么类的能力 无论如何,我找到了一种解决方法,我在视图中有一个请求列表。我想允许用户单击一个链接(列表中每个请

只是代码优先实体框架中的继承有一些问题

我使用代码优先模式实现了继承(也就是说,我有一个基类
Request
,其他类将其子类化
NewSpaceRequest

就功能而言,框架/语言似乎没有提供更多的功能

例如,我希望有一个包含所有请求的列表的视图,根据请求的类型使用不同的文本。我无法找到一个简单的方法来实现这一点,因为我总是必须对请求进行类型转换,这意味着我失去了所有子类功能和告诉我拥有什么类的能力

无论如何,我找到了一种解决方法,我在视图中有一个请求列表。我想允许用户单击一个链接(列表中每个请求一个链接),然后发送到一个操作,该操作将根据请求的类型而变化。问题是,到目前为止,我所有的请求都属于
请求类型(我相信这是foreach的要求)所以我不知道它们到底是什么

当我首先对代码使用继承时,总是遇到这样的小问题。我做错什么了吗

就功能而言,框架/语言似乎没有提供更多的功能

不,因为这不是EF的责任。它为您实现正确的子类型做得很好,然后它的工作就结束了。EF是关于数据的。行为由程序员决定

在您的代码中,您可以使用整个继承和多态性库来获得所需的行为。基类可以有一个子类重写的方法来执行所需的操作。因此,您应该在基类中将链接指向此方法

我失去了辨别我上过什么课的能力


因此,如果您利用这种多态性机制,则无需知道您正在处理的特定类型。这正是使用“干式”POCO进行继承时的方式。每当您觉得需要执行类似于
if(instance is MySubType)的操作时
通常一些设计缺陷会变得很明显。

为什么您需要向上转换到
请求
?需要澄清的是:您的
请求
不是一个HttpRequest,而是您自己定义的类,是吗?@haim770:在我的情况下,正确使用foreach。转换到var更无用。