カスタムOrchardモジュールで新しいテーブルのデータ移行を作成しました。このテーブルは、アップロードされたファイルデータを列の1つに保存する必要があります。問題の列の移行コードは次のとおりです(簡潔にするために他の列は削除されています)。
SchemaBuilder.CreateTable("Attachment", table => table
.Column<byte[]>("Content", col => col.WithLength(2147483647).WithType(DbType.Binary).Unlimited())
);
WithLengthメソッドとUnlimitedメソッドの両方を追加/削除しようとしましたが、どちらもエラーの発生を停止しません。NHibernateの例外は次のとおりです。
The length of the byte[] value exceeds the length configured in the mapping/parameter.
at NHibernate.Type.AbstractBinaryType.Set(IDbCommand cmd, Object value, Int32 index)
at NHibernate.Type.NullableType.NullSafeSet(IDbCommand cmd, Object value, Int32 index)
at NHibernate.Persister.Entity.AbstractEntityPersister.Dehydrate(Object id, Object[] fields, Object rowId, Boolean[] includeProperty, Boolean[][] includeColumns, Int32 table, IDbCommand statement, ISessionImplementor session, Int32 index)
編集:私はバイナリ長の規則を追加するなどのことで遊んでいます(ここを参照してください:NHibernate Image Storage-byte []値の長さが構成された長さを超えています)、これも役に立ちませんでしたが、まるでDbType.Binaryには8000バイトの制限があります。これは、私が到達している上限です。MSDNドキュメントから:DbType.Binary-1〜8,000バイトの範囲のバイナリデータの可変長ストリーム。答えは、この制限の影響を受けないSqlDbType.Imageを使用することですが、OrchardSchemaBuilderでは使用できません。
編集2:追加するのを忘れました-添付ファイルテーブルに保存されているドメインオブジェクトを呼び出すIRepository<T>.Create()
か、作成または更新するとエラーが発生します。IRepository<T>.Update()
SchemaBuilderをオーバーライド/拡張して、SqlDbType.Imageを列タイプとして使用できるようにする方法はありますか?Orchard1.6を使用しています