我正在使用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; }
答案 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],我发现了这一点。