1
добавить новый PropertyAttributeConvention для EF Core:Как заменить стандартный SqlServerConventionSetBuilder по умолчанию, реализованный в EF Core?
public class RowGuidColumnAttributeConvention : PropertyAttributeConvention<RowGuidColumnAttribute>{
public override InternalPropertyBuilder Apply(InternalPropertyBuilder propertyBuilder, RowGuidColumnAttribute attribute, MemberInfo clrMember)
{
propertyBuilder.HasAnnotation("RowGuidColumn", "TRUE", ConfigurationSource.DataAnnotation);
return propertyBuilder;
}}
И наследовать от SqlServerConventionSetBuilder добавить эту Конвенцию:
public class DefaultCoreConventionSetBuilder : SqlServerConventionSetBuilder
{
public DefaultCoreConventionSetBuilder(IRelationalTypeMapper typeMapper, ICurrentDbContext currentContext, IDbSetFinder setFinder)
: base(typeMapper, currentContext, setFinder)
{ }
public override ConventionSet AddConventions(ConventionSet conventionSet)
{
base.AddConventions(conventionSet);
var rowGuid = new RowGuidColumnAttributeConvention();
conventionSet.PropertyAddedConventions.Add(rowGuid);
conventionSet.PropertyFieldChangedConventions.Add(rowGuid);
return conventionSet;
}
}
Затем замените его в файле запуска:
services.AddEntityFrameworkSqlServer()
.AddScoped<SqlServerConventionSetBuilder, DefaultCoreConventionSetBuilder>()
.AddScoped<SqlServerMigrationsSqlGenerator, DefaultSqlServerMigrationSqlGenerator>()
.AddDbContext<DataContext>();
, но на результат никакое соглашение, добавленное к модели, не создается в процессе миграции. Может ли кто-нибудь мне помочь?