既存のデータベースでEF6を使用しようとしていますが、互換性が必要です。 データベースはnHibernateによって生成されており、一部のテーブルは階層ごとのテーブル(TPH)継承モデルを使用しています。エンティティフレームワーク6でディスクリプタ列の名前、長さ、および値をカスタマイズする方法
ディスクリミネータ列の名前はCategory
(Discriminator
ではなく)で、SQLの長さは255(128ではなく)です。値は、EFが生成する値とも異なります。
既存の列(名前、サイズ、値)を使用するようにEFを設定するにはどうすればよいですか?
私は、カスタム規則を定義しようとしました:
protected class DiscriminatorRenamingConvention : IStoreModelConvention<EdmProperty>
{
public void Apply(EdmProperty property, DbModel model)
{
if (property.Name == "Discriminator")
{
property.Name = "Category";
property.MaxLength = 255;
}
}
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<MyEntityA>().Map(x => x.Requires("Category").HasValue("CatA"));
modelBuilder.Entity<MyEntityB>().Map(x => x.Requires("Category").HasValue("CatB"));
modelBuilder.Conventions.Add<DiscriminatorRenamingConvention>();
base.OnModelCreating(modelBuilder);
}
これはOnModelCreating
メソッド内の命令のどんな順番Category
が、128の長さという名前の列を生成します。カテゴリの値を指定すると、MaxLength
を上書きしているようです。
if (property.Name == "Discriminator")
ここでは最大長とは何ですか?列(Name)などの名前の長さが255であるNameのプロパティですか? @daltonwide – Rajput
私はので、私はコードがコメントに書き込むことができないので、これはそれを修正することができかもしれ答えに提供していますnvarchar型としてSQLカラム(255) – daltonwide
をマップするためのMaxLengthを使用しています。@ daltonwide – Rajput