Как изменить автоматически сгенерированное имя внешнего ключа "свойства тени" для всех сущностей? - PullRequest
0 голосов
/ 09 февраля 2019

У меня есть такая модель

public class Class1 {
    public int identifier {get;set;}
}
public class Class2 {
    public int identifier {get;set;}
    public List<Class1> holders {get;set;}
    public List<Class1> users{get;set;}
}

Моя проблема в том, что сгенерированные внешние ключи в имени Class1 имеют значения «Class2_identifier» и «Class2_identifier1», а я хочу «Class2_holder_identifier» и «Class2_users_identifier»

реальная модель действительно огромна, так что то, что я ищу, позволяет переопределить то, как сгенерированы имена в шаге "add -igration"

1 Ответ

0 голосов
/ 09 февраля 2019

Не полная реализация, просто подсказка: если вы используете EntityFramework 6, вы можете определить пользовательское соглашение о модели:

public class ForeignKeyNamingConvention : IStoreModelConvention<AssociationType>
{
    public void Apply(AssociationType association, DbModel model)
    {
        if (association.IsForeignKey)
        {
            var constraint = association.Constraint;
            // Implement your renaming code.
            // The data you need is inside association.Constraint.
        }
    }
}

И добавить его в DbContext.OnModelCreating:

modelBuilder.Conventions.Add(new ForeignKeyNamingConvention());

Этот ответ содержит некоторый код, который можно использовать повторно (в этом случае соглашение используется для удаления подчеркиваний в именах столбцов).

Редактировать: OPвключили их окончательное решение здесь:

Проблема, упомянутая в ef core "Это та же проблема в ef6, но без сообщения " console

Существует несколькоотношения между «Class1» и «Class2» без настроенных свойств внешнего ключа, заставляющие EF создавать теневые свойства для «Organization» с именами, зависящими от порядка обнаружения.

public class ForeignKeyNamingConvention : IStoreModelConvention<AssociationType>
{
    public void Apply(AssociationType association, DbModel model)
    {
        if (association.IsForeignKey)
        {
            var constraint = association.Constraint;
            // as i just needed the fk column name to be more clear 
            // "{entityName}_{propertyName}" which is provided in 
            // {association.Name}
            association.Constraint.ToProperties[0].Name = association.Name;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...