【问题标题】:EntityFramework (ORM) object names and domain model names - how to avoid duplicates?EntityFramework (ORM) 对象名称和域模型名称 - 如何避免重复?
【发布时间】:2014-09-04 13:41:42
【问题描述】:

假设我有一个使用实体框架的项目,但我想使用自己的类而不是 EF 类。

使用我自己的类的原因:

  • 易于在代码中添加属性
  • 易于派生和继承
  • 与数据库的绑定更少

现在,我的数据库有像 UserConference 这样的表名。

但是,在我的域项目中,我还将我的文件称为 User.csConference.cs

这意味着我突然有两个具有相同命名的对象,这通常很烦人,因为你必须一直使用命名空间才能知道它们的区别。

我的问题是如何解决这个问题?

我的想法:

  • 为所有数据库表添加前缀“db”。我通常这样做,但在这种情况下,我无法更改数据库
  • 为所有 C# 类加上“Poco”或类似的前缀或后缀

我只是不喜欢我的任何想法。

你通常是怎么做的?

【问题讨论】:

  • 所以您不能更改数据库名称,也不想更改 c# 类名,但您希望它们有所不同?这是第 22 条军规
  • @Colin 是我所期望的答案类型 ;) 我希望得到魔术豆,但我看不到一些非常明显的解决方案

标签: c# entity-framework orm naming-conventions


【解决方案1】:

没有更多背景很难说,但听起来您正在使用实体框架设计器来生成 EF 类。这被称为“模型优先”workflow。您是否考虑过使用Code First / Code Only 工作流程?首先编写代码时,您可能拥有不了解数据库、EF 或数据注释的 POCO 类。数据库和 POCO 之间的映射可以在外部的 DBContextEntityTypeConfiguration 类中完成。

您应该能够首先通过代码仅使用一组对象来实现与 EF 解耦的目标。

【讨论】:

    【解决方案2】:

    为了扩展上述答案,数据库表名 User(或许多 DB 设计人员喜欢的 Users)是对象 User 的持久存储的标识符在您的代码文件 User.cs 中定义。这些标识符中没有一个共享相同的空间,所以应该没有混淆。实际上,它们的命名相似,是为了在空间(数据存储、代码、开发环境)之间创建松散耦合,这样您就可以保持理智,其他人也可以阅读您的代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-22
      • 1970-01-01
      • 2011-11-25
      • 1970-01-01
      • 1970-01-01
      • 2019-11-23
      • 1970-01-01
      相关资源
      最近更新 更多