Entity Framework Codeが最初に列を持つテーブルを作成するための適切な構文を見つけようとして、webを検索しました:varchar(max)。
これは私が持っているものです。デフォルトでは、これによりvarchar(128)が作成されます。 varchar(max)を作成するにはどうすればよいですか?
成功せずに[MaxLength]を試しました。
任意の助けをいただければ幸いです。ありがとう!
[Column(TypeName = "varchar")]
public string MediaDesc { get; set; }
[Column(TypeName = "varchar(MAX)")]
驚くべきことに、最も明白なソリューションが機能します。
[MaxLength]
属性は、MAXではない最大長のvarchar
列のみを作成します-私の場合(SQL Server Express 2008 R2)-8000。
これにより、nvarchar(max)
が取得されます。
_[StringLength(int.MaxValue)]
_
非ユニコードを強制する属性はないと思います(本当に必要ですか?)ので、varchar(max)
の場合、DbContextにTweakが必要です:
_protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Entity>().Property(x => x.MediaDesc).IsUnicode(false);
}
_
[MaxLength]注釈を使用します。
[Column(TypeName = "varchar")]
[MaxLength]
public string MediaDesc { get; set; }
@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);
_
[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文字を超えると検証がスローされます