2011-10-18 5 views
3

Entity Frameworkを使用してWebサイトのコンテンツをデータベースに保存しようとしています。ただし、HTML> 4000の長さの場合、これらの検証エラーが発生します:Entity Frameworkを使用してSQLデータベースに長い文字列を保存します。

A first chance exception of type 'System.Data.Entity.Validation.DbEntityValidationException' occurred in EntityFramework.DLL WebDev.WebServer40.exe Information: 0 : Property: RawData Error: The field RawData must be a string or array type with a maximum length of '4000'.

これを回避する方法はありますか? RawDataはNVARCHAR(4000)として作成されていますが、より良い型は​​TEXTになります。何とかそれを強制することはできますか?

ありがとうございます!

+0

RawDataプロパティはどのような種類のデータですか?それは文字列ではありませんか? – Icarus

+0

SQL CEを使用していますか? –

+0

RawDataはC#の単なる文字列です。私はSQL CEを使用しています(単に接続文字列で判断する)。 –

答えて

2

TEXTデータ型はNVARCHAR(MAX)の賛成で廃止されました、私はそれを使って自分のリファクタリングを道路の下に保存します。

http://technet.microsoft.com/en-us/library/bb510662.aspx

SQL CEはそれはそれは、SQL Server 2008を使用することが可能である場合には、Entity Frameworkのは、あなたの文字列から、あなたのためNVARCHAR(MAX)列を生成しますNVARCHAR(4000)

にあなたの文字列を制限NVARCHAR(MAX)をサポートしていません。

+0

次に、MAXの値をどのように引き上げますか? –

+0

この回答を明確にするために、SQL Server 2008に移行してください.CEは使用しないでください。 –

+0

SQLCE(4)の制限は4000ですか? [MaxLegth]注釈を使用するとうまくいくと思います...私はそれを自分で使っていて、それはうまくいきます... –

1

TEXTタイプが良い選択肢です。しかし、これは限られたnvarcharに比べてメモリが空いています。

BLOBを使用することもできますが、一部の文字列データ処理が必要になります。

+0

このテーブルには大量の行はありませんので、TEXTと一緒に行かなければなりませんか? BLOBはより多くのメモリを効率的に使用しますか? –

+0

TEXTは、値を文字列として扱う方が処理が簡単です。 BLOBを使用する場合は、保存するときにバイナリに変換してから、読み込んだときに文字列に変換する必要があります。 – Jonats

0

まずEFコードを使用していますか?エンティティマッピングファイルでテキストタイプを指定できます。

例マッピングファイル:

public class CustomerMap : EntityTypeConfiguration<Customer> 
{ 
    this.Property(t => t.Description).HasColumnType("text"); 
} 

は、その後、あなたがOnModelCreatingメソッドであなたのdbContextクラスにマッピング・ファイルを登録する必要があります。

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Configurations.Add(new CustomerMap()); 
    base.OnModelCreating(modelBuilder); 
} 
+0

マッピングファイルはどこにありますか?私は 'this.Property'が何を指しているのか理解しようとしています。 –

6

私はSQL CE 4.0を使用していますが、まったく同じ問題があります。私は今、私はContentプロパティにどんなコンテンツを保存することができ、次のDataAnnotation(私は注釈が好き:))

public class Page 
    { 
     [Key] 
     public int PageId { get; set; } 

     [MaxLength] 
     public string Content { get; set; } 
    } 

を使用してそれを解決するために管理しました!

関連する問題