2017-02-25 16 views
1

私は以下のようにモデルを宣言しますEFコアが設定されていない理由カスタム注釈? DbContextで

modelBuilder.Entity<FileStore>().Property(x => x.FileStoreId) 
      .ValueGeneratedNever() 
      .ForSqlServerHasDefaultValueSql("NewSequentialId()") 
      .HasAnnotation("RowGuidColumn", true); 

が、後HasAnnotation(真の「RowGuidColumn」は、)列に任意の注釈を追加しないで、移行を追加します。

columns: table => new 
      { 
       FileStoreId = table.Column<Guid>(nullable: false, defaultValueSql: "NewSequentialId()"), 
       CreationTime = table.Column<DateTimeOffset>(nullable: false), 
      } 

と私が最も直接的に注釈を追加:

FileStoreId = table.Column<Guid>(nullable: false, defaultValueSql: "NewSequentialId()").**Annotation("RowGuidColumn", true)** 

どのように追加マイグレーションで自動生成のアノテーションを追加できますか?

+0

EFの移行でRowGuidColがサポートされていますか? AFAIKを移行コードに追加する必要があります。 –

答えて

1

プロバイダは、どのモデル注釈を移行操作にコピー/変換するかを指定します。あなたが求めていることをするには、プロバイダー固有のIMigrationsAnnotationProviderサービスを無効にする必要があります。

optionsBuilder.UseSqlServer(connectionString) 
    .ReplaceService<SqlServerMigrationsAnnotationProvider, MyMigrationsAnnotationProvider>(); 

そして、ここでの実装です。

class MyMigrationsAnnotationProvider : SqlServerMigrationsAnnotationProvider 
{ 
    public override IEnumerable<IAnnotation> For(IProperty property) 
     => base.For(property) 
      .Concat(property.GetAnnotations().Where(a => a.Name == "RowGuidColumn")); 
} 

そこからは、プロバイダ固有のIMigrationsSqlGeneratorサービスをオーバーライドすることで、SQLにそれを回すために何かをする必要があると思います。

+0

お返事ありがとうございます。私はAnnotationProviderを変更することを忘れています。 –

関連する問題