2017-02-21 7 views
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>(); 

, но на результат никакое соглашение, добавленное к модели, не создается в процессе миграции. Может ли кто-нибудь мне помочь?

ответ

1

Я решил эту проблему,

В Startup Файл:

services.AddDbContext<DataContext>(); 

И DbContext переопределение OnConfiguring:

optionsBuilder 
      .ReplaceService<IConventionSetBuilder, DefaultCoreConventionSetBuilder>() 
      .ReplaceService<IMigrationsSqlGenerator, DefaultSqlServerMigrationSqlGenerator>() 
      .UseSqlServer(_configuration["ConnectionStrings:DbConnection"]); 
Смежные вопросы