51

私は、Entity Framework Code Firstにvarchar(max)という列を持つテーブルを作成させるための正しい構文を見つけようとして、Webを検索してきました。

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

[MaxLength] を試しましたが成功しませんでした。

どんな助けでも大歓迎です。ありがとう!

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

5 に答える 5

85
[Column(TypeName = "varchar(MAX)")]

驚くべきことに、最も明白な解決策が機能します。

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

于 2012-06-28T08:21:53.517 に答える
18

これはあなたを得るでしょうnvarchar(max)

[StringLength(int.MaxValue)]

非 Unicode を強制する属性はないと思います (よろしいですか?) のでvarchar(max)、DbContext を微調整する必要があります。

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Entity>().Property(x => x.MediaDesc).IsUnicode(false);
}
于 2012-06-28T16:28:04.690 に答える
5

[MaxLength] アノテーションを使用します。

[Column(TypeName = "varchar")]
[MaxLength]
public string MediaDesc { get; set; }
于 2012-06-28T06:23:31.800 に答える
1

@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);
于 2018-03-16T08:20:03.807 に答える
0

[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 文字を超えると検証がスローされます。

于 2016-07-14T15:11:13.077 に答える