我正在使用Simon Hughes的实体-框架反向POCO生成器为我的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; }
发布于 2018-06-10 09:08:42
在*.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参数的属性具有出现在数据库架构中的值,而不是生成器的驼峰大小写友好输出。我通过在*.tt文件中设置断点,并在T4解决方案资源管理器中右键单击*.tt文件来调用调试VS.NET模板,从而发现了这一点。
发布于 2018-05-18 00:51:23
反向POCO项目使用代码文本模板生成代码。负责生成类的列名和属性名的tt应该在EF.Reverse.POCO.Core.ttinclude中
GetUniqueColumnName会经过一系列步骤才能得到该名称。它可能有一个唯一的名称clash,这就是为什么它以1结尾对列名进行排序/序列化。
我已经附上了这个过程的图像。您还可以向控制台写入一些内容,并在保存database.tt时查看输出窗口,以了解发生了什么。
This is the screenshot of the EF.Reverse.POCO.core.ttinclude
https://stackoverflow.com/questions/50384300
复制相似问题