3

我正在编写一个带有数据库的应用程序,该数据库具有稍微不寻常的模式。至少我认为这很不寻常,我很少做数据库的事情。

我所有的书都告诉我应该使用实体框架(或其他一些 ORM)来访问数据库,但他们给出的例子总是沼泽标准 CRUD。每个实体一张表,每个对象一行,活动记录等。

我的架构使用不相交的子类型,因此每个实体有多个表,并且具有修订历史记录,因此编辑实际上会创建一个新行,但仅在一个表中(取决于已编辑的字段)

EF 是迎合这种自定义行为还是面向传统模式?我的理解是我创建了一个模式或域对象,数据库操作代码是自动生成的。我可以覆盖默认行为吗?我还能如何告诉 EF 我的自定义行为?

如果 EF 能让我的生活更轻松,我非常愿意学习它,但我不想花很多精力去学习一个我最终会努力让它做我想做的事情的框架。如果是这种情况,我宁愿推出自己的存储库并自己处理 SQL。

4

1 回答 1

3

这个问题太抽象了,无法明确回答。EF 提供了一些高级映射方案,其中可以将更多表映射到单个实体,但它定义了严格的规则来实现这一点。或者,您可以映射数据库视图或自定义 SQL 查询,组合表中的数据以形成实体。

更复杂的是您的第二个要求 - 它通常需要编写您自己的 SQL / 存储过程并将其映射到对表执行的 EFs CUD 操作。此 SQL 代码将包含您的更新规则的一部分,因为 EF 更新整个实体不仅影响记录。如果您使用映射视图或查询,则必须将这些 CUD 操作映射到自定义 SQL 或存储过程,否则您的实体将是只读的。

结论:可以实现你想要的但并不简单,它需要高级的EF知识,你仍然会写一些SQL。

于 2012-06-18T09:42:36.940 回答