反向POCO生成器:如何重命名反向外键?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (128)

我正在使用Simon Hughes的Entity-Framework Reverse POCO Generator为我的Sql Server数据库生成代码优先的EF类。生成器是高度可配置的,我很清楚如何在关系的多对一侧重命名外键列。我无法弄清楚如何使生成器重命名反向关系。

例如,我有一个名为Product_User的表,其中一个名为User_Info_ID的列引用了表USER_INFO。当我运行生成器时,User类中的一对多关系定义如下:

    /// <summary>
    /// Child ProductUsers where [Product_User].[User_Info_ID] point to this entity (FK_PRODUCT_USER_User)
    /// </summary>
    public virtual System.Collections.Generic.ICollection<ProductUser> User1 { get; set; } // Product_User.FK_PRODUCT_USER_User

如何让它生成这个呢?

    public virtual System.Collections.Generic.ICollection<ProductUser> UserProducts { get; set; } 
提问于
用户回答回答于

在* .tt文件里面

Settings.ForeignKeyName = (tableName, foreignKey, foreignKeyName, relationship, attempt) => {

    if (foreignKey.PkTableName == "USER_INFO" && foreignKey.FkTableName == "Product_User" 
        && foreignKey.FkColumn == "User_Info_ID" && relationship == Relationship.OneToMany)
        return "UserProducts";

}

foreignKey参数的属性具有出现在数据库模式中的值,而不是生成器的camel-case友好输出。通过在VS.NET解决方案资源管理器中右键单击* .tt文件,在* .tt文件中设置断点并调用[Debug T4 Template],我发现了这一点。

用户回答回答于

反向POCO项目使用代码文本模板生成代码。负责生成类的列名和属性名的tt将位于EF.Reverse.POCO.Core.ttinclude中

GetUniqueColumnName通过一系列步骤来获取名称。可能存在唯一的名称冲突,这就是为什么它在列末尾对列名称进行排序/序列化。

我附上了这个程序的图像。你还可以在控制台上写一些内容并在保存database.tt时查看输出窗口以查看发生了什么。

扫码关注云+社区

领取腾讯云代金券