0

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 プロパティが変更されないことに注意してください。

4

1 に答える 1

0

これは、Entity Framework 6.1 で修正されました。

1 月 23 日午後 3 時 52 分、lukew により終了 MaxLength を設定しても、文字列に IsUnicode プロパティが設定されないことが確認されました。これにより、IsUnicode を設定する文字列規則と文字列 MaxLength の構成の間の相互作用が修正されます。

于 2014-04-23T13:34:34.030 に答える