Не полная реализация, просто подсказка: если вы используете 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;
}
}
}