让NHibernate透明地将字节数组存储到文件系统或S3

时间:2011-01-10 22:29:25

标签: c# nhibernate

我希望能够将实体中的字节数组或流透明地存储到光盘(或S3或不存在)而不是DB(当然,在请求属性时将其读回),但我找不到任何类似的文档或示例。可能吗?有关如何实施这一点的任何暗示? IUserType? IEntityPersister?

2 个答案:

答案 0 :(得分:2)

检查另一个thread

IUserType和/或IEntityPersister定义在加载/插入/更新/删除时如何处理部分实体和/或实体整体。

在您的情况下,您必须定义较低级别的ORM抽象 - 编写NHibernate.Dialect.Dialect,NHibernate.Connection.IConnectionProvider和NHibernate.Driver.IDriver的实现。之后,您可以完全控制持久化的NHibernate对象。

或者,如果您的需求更简单,并且您只需将保存数据以某种方式复制到磁盘,同时将它们保存到数据库中,您就可以将监听器附加到NHibernate加载/保存过程。检查命名空间NHibernate.Event(IAutoFlushEventListener,IMergeEventListener,IPersistEventListener等...)。用法示例为here

答案 1 :(得分:0)

如果将blob的密钥存储在数据库中,并且在从数据库中读取用户类型时使用此密钥检索blob,则可以使用IUserType。但是,跨数据库和blob存储的事务管理将是一个问题。

实体持久性可以做很多工作来编写和正确,因为(N)Hibernate的这种可扩展性机制的文档并不是很好。它们非常适合关系数据库,但可用于访问其他存储机制。

使用事件触发器确实可以提供最佳选择。它们为实体的生命周期事件及其发生的事务提供了一个非常干净和紧凑的界面。