【问题标题】:Entity Framework, C# and super-classes实体框架、C# 和超类
【发布时间】:2013-04-24 12:25:48
【问题描述】:

我的数据库中有 6 个 100% 相等的表,唯一的变化是名称。 外观是这样的:

Offers_1、Offers_2、Offers_3 等等..

如果我在我的 C# 表单中使用实体框架,我会得到 6 个不同的类,这些类是由表命名的。 有没有办法可以为这些表使用父/超类? 也许他们可以有一个标识符来说明他们是哪个号码或类似的东西。

我敢肯定其他人之前一定遇到过这个问题。

对于那些想知道为什么我有 6 个相等的桌子的人。 我们在公司内制定了自己的进出报价方式,因此我们可以在离线表格上操作并在在线表格中获得最佳性能。

希望有帮助的头脑可以引导我走向光明:)

提前致谢

【问题讨论】:

  • 您的问题到底是什么?如果您至少没有尝试自己解决问题,则表明您还没有完全解决问题。不清楚您所说的“超类”是什么意思,该术语不是标准的 C# 编程术语。
  • 我也想知道这样做有什么好处。
  • 优点是我可以使用系统中的类。而不是创建一个新的 Offer_1 AND Offer_2 AND 等等...我可以创建一个“Offer”,这将是系统范围的
  • 您需要不同的表对我来说似乎很奇怪。
  • 是的,我知道 - 这不是我的决定。我们的托管部门规定了这一点。问题是一次只有3张表在线,所以我们不对在线表进行任何操作。

标签: c# database entity-framework inheritance superclass


【解决方案1】:

您似乎想使用 Table Per Inheritance (TPH):一个表用于多种类型。

这是here首先解释的模型。

这是解释(例如)here 代码优先。

【讨论】:

  • 嗯,这看起来很有趣,但是否可以在不影响数据库(因此不创建新表)的情况下做到这一点?如果它可以是一个所有表类都继承自的类或其他东西,我会很完美
  • 不,要在 EF 中使用 TPH,您必须有一个鉴别器列。如果数据库存在,但您应该使用 TPT(每种类型的表)。例如有一个基类。为基类派生您的类型,首先使用代码在上下文中配置派生类型,至少使用 HasTable 方法。
【解决方案2】:

如果您使用 SQL to Linq 表,您可以编辑 .dbml 文件中的行名。 通过这样做,您应该能够告诉您在 c# 代码中使用的女巫。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-08
    • 1970-01-01
    • 2017-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多