Обратный генератор POCO: как переименовать обратный внешний ключ? - PullRequest
0 голосов
/ 17 мая 2018

Я использую Обратный POCO-генератор Simon Hughes для создания классов EF с первым кодом для моей базы данных Sql Server. Генератор легко настраивается, и я хорошо знаю, как переименовать столбец с внешним ключом в отношениях «многие к одному». Я не могу понять, как заставить генератор переименовать обратную связь.

Например, у меня есть таблица с именем 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 голосов
/ 10 июня 2018

Внутри файла * .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 и вызвав [Debug T4 Template], щелкнув правой кнопкой мыши файл * .tt в VS.NET Solution Explorer.

0 голосов
/ 17 мая 2018

Проект Reverse POCO генерирует код, используя шаблон текста кода. Tt, который отвечает за генерацию имен столбцов и имен свойств классов, будет в EF.Reverse.POCO.Core.ttinclude

GetUniqueColumnName проходит серию шагов, чтобы получить имя. Для него может быть уникальное столкновение имен, и поэтому он упорядочивает / сериализует имя столбца с 1 в конце.

Я приложил изображение этой процедуры. Вы также можете записать что-то в консоль и посмотреть окно вывода при сохранении database.tt, чтобы увидеть, что происходит.

Это скриншот EF.Reverse.POCO.core.ttinclude

...