如何反映我的实体名称更改为导航属性名称

How to reflect the changing of my entities names to the navigation properties names

我根据 EntityFramework 中的 DB First 工作流程生成了一组实体。

实体有专有名称,所以我决定更改它们,但是当我更改实体名称时,导航 属性 保留旧名称的复数形式和单数形式,如下所示:两个实体 (SREmp ,SRPic)

SREmp      SRPic

Id         id
name       content
phone      note
- - -      - - -
SRPics     SREmp

现在,当我将我的实体名称更改为 (Employee,EmpPhoto) 时, 导航属性没有改变!!

如您所知,当您使用 DB First 方法时,您使用的是 T4 模板,该模板从数据库中提取信息以创建模型实体。因此,模型实体将从数据库中的信息中获取它们的名称和属性。

所以,如果您需要自定义属性的名称,只有两种方法可以实现,并且都涉及自定义T4模板:

  1. 如果您不能以任何方式修改您的数据库,因为您不想这样做或您没有权限,请通过包含一个映射数据库的字典来修改 T4 模板 table 名称到所需的实体名称。然后,沿着 T4 模板代码,使用字典创建实体名称,以及导航 属性 名称。

  2. 如果您可以修改数据库,请通过添加有关所需实体名称、导航名称等的信息来修改它。您可以在扩展属性中执行此操作,或者使用命名约定,例如外键约束。

第二个解决方案可以通过几种不同的方式实施。例如,我使用 FK 约束名称来定义导航属性。我将我的数据库 FK 命名为 FK_Employee_Pictures,以便模板在图片 table 中创建导航属性 Employee,并在员工 table 中创建 Pictures。这真的很强大,因为你不能给你的关系精确命名,比如 FK_Empoyee_FacePictureFk_Employee_IdCardPicture。您还可以使用扩展属性(如描述)从您的 T4 模板访问它们。您可以定义自己的约定,然后您必须修改 T4 模板才能使用它们。

任何其他可能的解决方案都需要人工干预,这是一个非常糟糕的主意。您可以在您的模型项目中找到给定实体的所有用途,并进行重命名重构。但这很昂贵,而且,如果您修改数据库,则需要再次手动更新模型实体。使用之前的任何解决方案,您只需更新映射字典或数据库约定,然后再次 运行 T4 模板,这更便宜并且 repeatable.

您应该寻找功能强大且易于理解的自定义模板。我真的很喜欢这个:EntityFramework Reverse POCO Generator.