【问题标题】:Inheritance with code-first Entity Framework使用代码优先的实体框架进行继承
【发布时间】:2014-04-10 04:49:15
【问题描述】:

代码优先实体框架中的继承存在一些问题。

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

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

例如,我想要一个视图,其中包含所有请求的列表,根据请求的类型使用不同的文本。我无法找到一种简单的方法来做到这一点,因为我总是必须对 Request 进行类型转换,这意味着我失去了所有子类功能我无法分辨我拥有什么类。

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

在使用代码优先的继承时,我经常遇到这样的小问题。难道我做错了什么?

【问题讨论】:

  • 你为什么需要向上转换到Request
  • 要明确一点:您的Request 不是 HttpRequest 而是您自己定义的类,是吗?
  • @haim770:就我而言,正确使用 foreach。转换为 var 更没用。

标签: c# asp.net-mvc entity-framework inheritance


【解决方案1】:

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

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

在您的代码中,您可以使用继承和多态的整个库来获得您想要的行为。基类可以有一个方法,子类覆盖以执行所需的操作。所以你应该将链接点击指向基类中的这个方法。

我失去了(...)我知道我上什么课的能力

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-22
    • 1970-01-01
    • 2013-05-02
    相关资源
    最近更新 更多