web-dev-qa-db-ja.com

ASP.net EF Codefirst Data Annotationsを使用してSQL Serverの列をvarchar(max)に設定するにはどうすればよいですか?

Entity Framework Codeが最初に列を持つテーブルを作成するための適切な構文を見つけようとして、webを検索しました:varchar(max)。

これは私が持っているものです。デフォルトでは、これによりvarchar(128)が作成されます。 varchar(max)を作成するにはどうすればよいですか?

成功せずに[MaxLength]を試しました。

任意の助けをいただければ幸いです。ありがとう!

[Column(TypeName = "varchar")]
public string MediaDesc { get; set; }
44
Maddhacker24
[Column(TypeName = "varchar(MAX)")]

驚くべきことに、最も明白なソリューションが機能します。

[MaxLength]属性は、MAXではない最大長のvarchar列のみを作成します-私の場合(SQL Server Express 2008 R2)-8000。

71
Slauma

これにより、nvarchar(max)が取得されます。

_[StringLength(int.MaxValue)]
_

非ユニコードを強制する属性はないと思います(本当に必要ですか?)ので、varchar(max)の場合、DbContextにTweakが必要です:

_protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Entity>().Property(x => x.MediaDesc).IsUnicode(false);
}
_
15
Diego Mijelshon

[MaxLength]注釈を使用します。

[Column(TypeName = "varchar")]
[MaxLength]
public string MediaDesc { get; set; }
4
bhuvin

@Slauma回答の更新。

OnModelCreatingで次のようなすべての文字列にオーバーライドを使用します。

_modelBuilder.Properties<string>().Configure(s => 
    s.HasMaxLength(256).HasColumnType("nvarchar"));
_

次に、次のような属性を持つプロパティを変更します。

_[Column(TypeName = "nvarchar(MAX)")]
public string CaseComment { get; set; }
_

またはこれ:

_modelBuilder.Entity<YourClass>()
    .Property(b => b.CaseComment)
    .HasColumnType("nvarchar(MAX)");
_

これにより、例外が発生する可能性があります。 _Validation failed for one or more entities. See 'EntityValidationErrors' property for more details._列のデータ型が正しい場合でも、Entity Frameworkはnvarchar(256)であると判断し、エラーDbEntityValidationExceptionをスローします。

これを修正するには、代わりに次を使用します。

_[Column(TypeName = "nvarchar(MAX)")]
[MaxLength]
public string CaseComment { get; set; }
_

または

_modelBuilder.Entity<YourClass>()
    .Property(b => b.CaseComment)
    .HasColumnType("nvarchar(MAX)")
    .HasMaxLength(null);
_
0
Ogglas

[Column(TypeName = "varchar(MAX)")]は、データベースにvarchar(Max)をもたらします。文字列MaxLengthを100に設定するカスタム規則がある場合、modelBuilder .Properties<string>() .Configure(c => c.IsUnicode(false).HasMaxLength(100));には、MaxLength属性[Column(TypeName = "varchar(MAX)"), MaxLength]を含める必要があります。しないと、データベースでvarchar(MAX)を取得しますが、100文字を超えると検証がスローされます

0
cResults