2013-08-16 1 views
11

私はEF 5でコードを最初に実行しています。これまでのところ私は本当に気に入っていましたが、文字列をnvarcharにデフォルト設定しています。私はvarcharを使用したい場合は、明示的にそれを伝える必要があります。エンティティフレームワーク5のコードは、最初にグローバルにvarcharにマップされます

私は次のように文字列の代わりにnvarchar型のvarchar型を使用するように強制することができます。

public class Member 
{ 
    public int id { get; set; } 

    [MaxLength(255), Required, Column(TypeName = "varchar")] 
    public string firstName { get; set; } 

    [MaxLength(255), Required, Column(TypeName = "varchar")] 
    public string surname { get; set; } 
} 

私は一般的にかかわらず、ほとんどすべての場合に代わりにnvarchar型のvarchar型使用することになり、私は多くのグローバル文字列の列を持っていることを好むだろうvarcharにマップされ、上記のように必要に応じて列単位でnvarcharを設定できるようにする必要があります。

誰でもこれを行う方法を知っていますか?モデル内の各文字列に対して[Column(TypeName = "varchar")]と入力する必要はありません。

答えて

4

あなたはとしてそれを書く必要があります:あなたの代わりにnvarchar型varchar型を使用するすべての文字列プロパティをマップするためにこれを使用することができますEF 6にこのlink

+0

私はそれが私の例に従ってこのように書くことができることを実現します。私はそれをグローバルに行うことは可能でなければならないと確信しています。 –

+0

これは流暢なAPIを試しましたか?DataAnnotationが最良の結果を得られない場合があるので –

+0

私もこの問題を抱えていました。私のように既にNVarcharカラムを作成した場合は、次のコードを追加して追加して問題を解決します(NVarcharカラムをVarcharに変換します)。ブラボー! –

9

をご覧ください多くの情報については

[Column(TypeName = "VARCHAR")] 
public string firstName { get; set; } 

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Properties() 
      .Where(x => 
       x.PropertyType.FullName.Equals("System.String") && 
       !x.GetCustomAttributes(false).OfType<ColumnAttribute>().Where(q => q.TypeName != null && q.TypeName.Equals("varchar", StringComparison.InvariantCultureIgnoreCase)).Any()) 
      .Configure(c => 
       c.HasColumnType("varchar")); 
    } 
+1

属性をチェックせずにすべてをvarcharに設定する場合は、これを使用します。 'modelBuilder.Properties ().Configure(c => c.HasColumnType(" varchar "));' –

-1

または

modelBuilder.Properties<string>().Configure(c => c.IsUnicode(false)); 
関連する問題