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

时间:2018-05-17 06:00:17

标签: c# entity-framework foreign-keys code-generation poco

我正在使用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; } 

2 个答案:

答案 0 :(得分:0)

Reverse POCO Project使用代码文本模板生成代码。负责生成类的列名和属性名的tt将在EF.Reverse.POCO.Core.ttinclude

中。

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

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

This is the screenshot of the EF.Reverse.POCO.core.ttinclude

答案 1 :(得分:0)

在* .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],我发现了这一点。