Entity Framework 6 で次のカスタム規則を作成しました。
public class NonUnicodeConvention : Convention
{
public NonUnicodeConvention()
{
this.Properties<string>()
.Configure(property => property.IsUnicode(false));
}
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
// Configurations
modelBuilder.Configurations.AddFromAssembly(Assembly.GetExecutingAssembly());
// Conventions
modelBuilder.Conventions.Add(new NonUnicodeConvention());
}
構成を行わずに文字列プロパティを追加すると、作成される移行は次のようになります。
CreateTable(
"dbo.SomeTable",
c => new
{
Id = c.Int(nullable: false, identity: true),
Name= c.String(unicode: false)
})
.PrimaryKey(t => t.Id);
これはまさに私が望むものです...しかし、特定のフィールドで HasMaxLength を使用するとすぐに、ユニコードにならないようです:
Property(p => p.Name).HasMaxLength(128);
CreateTable(
"dbo.SomeTable",
c => new
{
Id = c.Int(nullable: false, identity: true),
Name= c.String(maxLength: 128)
})
.PrimaryKey(t => t.Id);
この場合、何かがユニコード規則を上書きしているようです。Unicode 規則が必要だったので、すべての場合に指定する必要はありませんでしたが、HasMaxLength を使用するたびに上書きされるようです。私は何か間違ったことをしていますか?
IsFixedLength や IsRequired などの他の文字列固有の構成を使用すると、Unicode プロパティが変更されないことに注意してください。