Fluent NHibernateを使用していて、画像を保存しようとしています。小さな画像は動作しますが、大きな画像にはありませんし、データベース(SQL Serverなど)に保存するとき、私は、このエラーが表示されます。NHibernate Image Storage - バイト[長さ]の長さが、設定された長さを超えています
例外:CFC.Domain.Vehicle.Image
ためエラー脱水プロパティ値内部例外: byte []値の長さが、マッピング/パラメータで設定された長さを超えています。ここで
私のマッピングです:
mapping.Table("Vehicle");
mapping.Id(x => x.Id, "VehicleID");
mapping.Map(x => x.Year).Not.Nullable();
mapping.Map(x => x.Image).CustomSqlType("VARBINARY(MAX)").Length(int.MaxValue);
"イメージ" プロパティは、[]バイトです。
データベースに適切なnvarchar(max)列を作成するCustomSqlTypeと長さに注意してください。私は同様の問題について話している他の投稿を無数に読んだことがありますが、この特定のエラーをカバーするものはありません。データが切り捨てられて保存されているわけではなく、SQLクエリを送信する前にエラーが発生しているだけです。
私がテストしている画像は、標準のWindows 7サンプル画像(もちろんPenguins.jpg)ですが、1kb前後の画像は正常に動作します。
私は助けてくれてありがとう!それが助けになるなら、スタックトレースの始めはここにあります。
[HibernateExceptionで:バイトの長さは、[]の値は、マッピング/パラメータで構成された長さ を超え]
NHibernate.Type.AbstractBinaryType.Set(のIDbCommandのCMD、オブジェクト値、 のInt32インデックス)+ 207
NHibernate.Type.NullableType.NullSafeSet(のIDbCommandのCMD、オブジェクト値、 のInt32インデックス)397
NHibernate.Type.NullableType.NullSafeSet(のIDbCommand ST、オブジェクト値、 のInt32インデックス、ブール[]に設定可能な、ISessionImplementorセッション)+62
NHibernate.Persister.Entity。 AbstractEntityPersister.Dehydrate +350[PropertyValueException(オブジェクト IDは、ROWID、ブール[] includeProperty、 ブール[] [] includeColumns、のInt32テーブルのIDbCommand文、 ISessionImplementorセッション、のInt32インデックスオブジェクト、[]フィールドオブジェクト) : CFC.Domain.Vehicle.Image]
オブジェクト
NHibernate.Persister.Entity.AbstractEntityPersister.Dehydrate(オブジェクト ID、[]フィールドオブジェクト、ROWID、ブール[] includeProperty、 ブール[] []のオブジェクトのエラー脱水プロパティ値includeColumns、Int32テーブル、IDbCommandステートメント、 ISessionImplementorセッション、Int32インデックス)+510
オブジェクトのフィールド、ブール[]、オブジェクトの[]フィールド、ブール[] includeColumns、Int32 j、IDbCommand st、ISessionImplementorセッション) +59 NHibernate.Persister.Entity(NHibernate.Persister.Entity .GeneratedIdentifierBinder.BindValues(IDbCommand ps)+79
NHibernate.Id.Insert.AbstractReturningDelegate。PerformInsert(SqlCommandInfo insertSQL、ISessionImplementorセッション、IBinderバインダー)102
NHibernate.Persister.Entity.AbstractEntityPersister.Insert(オブジェクト[] フィールド、ブール[] notNullを、SqlCommandInfoのSQL、オブジェクトobj、 ISessionImplementorセッション)265
実行 NHibernate.Persister.Entity.AbstractEntityPersister.Insert(オブジェクト[] フィールド、オブジェクトobj、ISessionImplementorセッション)+358
NHibernate.Action.EntityIdentityInsertAction.Execute()262
NHibernate.Engine.ActionQueue.Execute(IExecutable )+56
NHibernate.Event.Default.AbstractSaveEventListener.PerformSaveOrRepl icate、811
NHibernate.Event.Default.AbstractSaveEventListener.PerformSave(オブジェクト エンティティ、オブジェクトID、IEntityPersisterの存続(オブジェクト エンティティは、のEntityKeyキーは、IEntityPersisterの存続は、ブール useIdentityColumnは、何でも、IEventSourceソース、ブール requiresImmediateIdAccessオブジェクト)ブール useIdentityColumn、何でも、IEventSourceソース、ブール requiresImmediateIdAccess)543
NHibernate.Event.Default.AbstractSaveEventListener.SaveWithGeneratedId(オブジェクト エンティティ、文字列エンティティネームオブジェクト、何でも、IEventSourceソース、 ブールrequiresImmediateIdAccess)257
長マッピングを削除しますか? – dotjoe
コメントありがとうございます。残念ながらそれは長さなしで同じ問題です。上記のスタックトレースを追加して、同様に役立てました。 – jkriddle