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

时间:2016-02-08 08:28:59

标签: c# asp.net entity-framework entity-framework-6 edmx

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

实体具有正确的名称,因此我决定更改它们,但是当我更改实体名称时,导航属性保持旧名称的复数化和单一化,如下所示:两个实体(SREmp ,SRPic)< / p>

SREmp      SRPic

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

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

1 个答案:

答案 0 :(得分:1)

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

因此,如果您需要自定义属性的名称,则只有两种方法可以执行此操作,并且都涉及自定义T4模板:

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

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

  3. 第二种解决方案可以用几种不同的方式实现。例如,我使用FK约束名称来定义导航属性。我将我的DB FK命名为FK_Employee_Pictures,以便模板在图片表中创建导航属性Employee,并在employee表中创建Pictures。这非常强大,因为您无法使用FK_Empoyee_FacePictureFk_Employee_IdCardPicture之类的名称为您的关系提供准确的名称。您还可以使用扩展属性(如说明)从T4模板访问它们。您可以定义自己的约定,然后必须修改T4模板才能使用它们。

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

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