我在自定义 Orchard 模块中为新表创建了数据迁移。该表需要将上传的文件数据存储在其中一列中。这是相关列的迁移代码(为简洁起见,删除了其他列):
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 - The length of the byte[] value超出了配置的长度),这也没有帮助,但看起来好像DbType.Binary 有 8000 字节的限制,这是我要达到的上限。来自MSDN 文档:DbType.Binary - 可变长度的二进制数据流,范围在 1 到 8,000 字节之间。答案是使用不受此限制的 SqlDbType.Image,但 Orchard Schema Builder 无法使用它。
编辑 2:我忘了添加 - 当我调用IRepository<T>.Create()
或IRepository<T>.Update()
创建或更新存储在附件表中的域对象时发生错误。
有没有办法覆盖/扩展 SchemaBuilder 以便我可以使用 SqlDbType.Image 作为列类型?我正在使用果园 1.6