NHibernate:用于将文件保存在磁盘而不是数据库上的UserType

时间:2017-03-10 09:23:30

标签: c# file nhibernate iusertype

目前我们正在数据库中保存文件(或更好:他们的内容作为流)。

<class name="File"
     table="tblFile"
     lazy="false">
 <id name="_id"
    column="Id"
    access="field" >
  <generator class="native"/>
 </id>
 <property name ="_businessId"
          column="BusinessId"
          not-null="true"
          access="field" />
 <property name="_name"
          column="Filename"
          not-null="true"
          access="field" />
 <property name="_mimeType"
          column="Mime"
          not-null="true"
          access="field" />
 <property name="_content"
          column="Content"
          length="2147483647"
          not-null="true"
          access="field" />
 <property name="_fileType"
      column="FileType"
      not-null="true"
      access="field" />
</class>

总而言之,除非存在一些问题,否则这一切都运行良好:例如,您无法保存文件&gt; 2gb。

所以我们现在正在寻找更好的解决方案。 如果不将文件保存在数据库中,则必须将它们保存在磁盘上。 为了不重新实现总持久性过程,我们考虑实现一个自定义UserType(IUserType),将文件保存在磁盘上并将文件名存储在数据库中。

NullSafeSet会将文件保存在光盘上并将位置存储在数据库中,而NullSafeGet会(懒惰地)返回从数据库中的文件名创建的流。

我们在该解决方案中找到了一些优点,但也有一些缺点:

优点: - 除了实现UserType和极小地更改映射文件之外,不对代码进行任何更改 - 在光盘上保存文件 - ......

缺点: - 处置UserType创建的流的位置 - 保存文件的固定文件夹(到目前为止对我们来说没问题) - 也许放慢nhibernate - ......

所以现在我们想知道在光盘上保存文件的UserType是否是一个疯狂的想法,或者是否值得研究修复缺点?

0 个答案:

没有答案