Tôi đang sử dụng chế độ NHibernate lưu loát và đang cố gắng lưu trữ hình ảnh. hình ảnh nhỏ làm việc, nhưng hình ảnh lớn hơn không, và tôi nhận được lỗi này khi lưu vào cơ sở dữ liệu (SQL Server):Lưu trữ hình ảnh NHibernate - Độ dài của giá trị byte [] vượt quá độ dài được định cấu hình
Ngoại lệ: Lỗi giá trị khử nước sở hữu cho CFC.Domain.Vehicle.Image
Ngoại lệ bên trong: Độ dài của giá trị byte [] vượt quá độ dài được định cấu hình trong ánh xạ/tham số.
Dưới đây là bản đồ của tôi:
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);
Các "Hình ảnh" bất động sản là một byte [].
Lưu ý CustomSqlType và độ dài, tạo cột nvarchar (tối đa) thích hợp trong cơ sở dữ liệu. Tôi đã đọc vô số bài viết khác nói về các vấn đề tương tự, nhưng không có lỗi cụ thể nào. Nó không phải là dữ liệu đang được cắt ngắn và sau đó lưu lại, nó chỉ lỗi trước khi bao giờ gửi truy vấn SQL.
Hình ảnh tôi đang thử nghiệm chỉ là hình ảnh mẫu chuẩn của Windows 7 (Penguins.jpg tất nhiên) nhưng hình ảnh xung quanh 1kb hoạt động tốt.
Tôi đánh giá cao sự trợ giúp! Đây là sự khởi đầu của dấu vết ngăn xếp nếu nó giúp.
[HibernateException: Chiều dài của byte [] Giá trị vượt quá độ dài cấu hình trong các bản đồ/tham số.]
NHibernate.Type.AbstractBinaryType.Set (IDbCommand cmd, giá trị Object, Int32 index) + 207
NHibernate.Type.NullableType.NullSafeSet (IDbCommand cmd, giá trị Object, Int32 index) 397
NHibernate.Type.NullableType.NullSafeSet (IDbCommand st, giá trị Object, index Int32, Boolean [] settable, ISessionImplementor phiên) +62
NHibernate.Persister.Entity. AbstractEntityPersister.Dehydrate (Object id, Object [] lĩnh vực, đối tượng ROWID, Boolean [] includeProperty, Boolean [] [] includeColumns, Int32 bảng, IDbCommand tuyên bố, ISessionImplementor phiên, Int32 index) 350[PropertyValueException : Lỗi khử nước giá trị tài sản cho CFC.Domain.Vehicle.Image]
NHibernate.Persister.Entity.AbstractEntityPersister.Dehydrate (Object id, Object [] lĩnh vực, đối tượng ROWID, Boolean [] includeProperty, Boolean [] [] includeColumns, bảng Int32, IDbCommand statement, ISessionPhiên bản thực hiện, chỉ số Int32) +510
NHibernate.Persister.Entity.AbstractEntityPersister.Dehydrate (đối tượng id, đối tượng [] trường, Boolean [] bao gồmProperty, Boolean [] [] includeColumns, Int32 j, IDbCommand st, phiên ISessionImplementor) +59 NHibernate.Persister.Entity .GeneratedIdentifierBinder.BindValues (IDbCommand ps) +79
NHibernate.Id.Insert.AbstractReturningDelegate.PerformInsert (SqlCommandInfo insertSQL, phiên ISessionImplementor, IBinder binder) 102
NHibernate.Persister.Entity.AbstractEntityPersister.Insert (Object [] lĩnh vực, Boolean [] notnull, SqlCommandInfo sql, Object obj, ISessionImplementor phiên) 265
NHibernate.Persister.Entity.AbstractEntityPersister.Insert (Object [] lĩnh vực, đối tượng obj, phiên ISessionImplementor) +358
NHibernate.Action.EntityIdentityInsertAction.Execute() 262
NHibernate.Engine.ActionQueue.Execute (IExecutable thực thi) +56
NHibernate.Event.Default.AbstractSaveEventListener.PerformSaveOrRepl icate (Object tổ chức nào, EntityKey chủ chốt, IEntityPersister persister, Boolean useIdentityColumn, Object bất cứ điều gì, IEventSource nguồn, Boolean requiresImmediateIdAccess) 811
NHibernate.Event.Default.AbstractSaveEventListener.PerformSave (Object tổ chức nào, id Object, IEntityPersister persister, boolean useIdentityColumn, Object bất cứ điều gì, nguồn IEventSource, boolean requiresImmediateIdAccess) 543
NHibernate.Event.Default.AbstractSaveEventListener.SaveWithGeneratedId (Object thực thể, string Tên pháp nhân, đối tượng bất cứ điều gì, nguồn IEventSource, boolean requiresImmediateIdAccess) 257
Tháo lập bản đồ chiều dài? – dotjoe
Cảm ơn nhận xét. Thật không may nó là cùng một vấn đề mà không có chiều dài. Tôi đã thêm dấu vết ngăn xếp ở trên để trợ giúp. – jkriddle