2015-09-19 10 views
9

流暢なAPIを使用してEF6コードの最初のモデルを構築しています。私の理解は、デフォルトでは、文字列はnvarchar(max)になります。だから私は、255文字に最大のデフォルトの長さを設定するには、次の大会のコードを追加しました:EF6コードを設定する最初の文字列を流暢にnvarchar(最大)

 modelBuilder.Properties<string>() 
      .Configure(p => p.HasMaxLength(255)); 

その後、私はそうのようなデコレータ作成:私は実際に私の特定の文字列プロパティにこれを適用する

[AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = true)] 
public class TextAttribute : Attribute 
{ 
} 

をNVARCHAR(MAX)になりたい

[Text]デコレータを含むすべての文字列プロパティがNVARCHAR(MAX)を使用してdbに組み込まれていることを確認するにはどうすればよいですか?

 modelBuilder.Properties<string>() 
      .Where(p => p.CustomAttributes.Any(a => typeof(TextAttribute).IsAssignableFrom(a.AttributeType))) 
      .Configure(p => p.HasMaxLength(?????)); 

私はこれを完全に間違っていると思いますか?

答えて

14

これまでに回答が見つかったのかどうかは分かりませんが、誰かがそれをやり遂げる方法が不明な場合は、単にSQLデータ型を設定し、HasMaxLength()を無視してください。 (VARCHARのようなデータ型を指定する場合はVARCHAR(8000))

IsMaxLength()またはHasMaxLength(null)を使用し
 modelBuilder.Properties<string>() 
      .Where(p => p.CustomAttributes.Any(a => typeof(TextAttribute).IsAssignableFrom(a.AttributeType))) 
      .Configure(p => p.HasColumnType("nvarchar(max)")); 

のデータ型はnvarchar(4000)にフィールドを設定します。

7

あなたはEntityTypeConfiguration<MyEntity>クラスの中にそれをやっている場合、それはRickNoの答え@に似ていますが、このように行われます。

Property(x => x.MyVarcharMaxProperty) 
    .HasColumnType("nvarchar(max)"); 
関連する問題