列名称为“?” - 如何在NHibernate中映射

时间:2011-11-24 06:18:58

标签: c# nhibernate ms-access

我有一个遗留的MSaccess数据库,其中一列名为:“Active?”。 我正在使用NHibernate,我试着用这种方式映射它:

Property<bool?>(x => x.Active, map => map.Column("Active?"));

另外,我尝试过使用反引号:

Property<bool?>(x => x.Active, map => map.Column("`Active?`"));

但我无法成功映射上面的列名 -

我总是收到这个错误:

{"Nullable object must have a value."}

Stack Trace:   
  at System.ThrowHelper.ThrowInvalidOperationException(ExceptionResource resource)
  at System.Nullable`1.get_Value()
  at NHibernate.Driver.DriverBase.ExpandQueryParameters(IDbCommand cmd, 
      SqlString sqlString)
  at NHibernate.AdoNet.AbstractBatcher.ExpandQueryParameters(IDbCommand cmd, 
      SqlString sqlString)
  at NHibernate.Loader.Loader.PrepareQueryCommand(QueryParameters queryParameters,
      Boolean scroll, ISessionImplementor session)
  at NHibernate.Loader.Loader.DoQuery(ISessionImplementor session, QueryParameters
      queryParameters, Boolean returnProxies)
  at NHibernate.Loader.Loader.DoQueryAndInitializeNonLazyCollections(
      ISessionImplementor session, QueryParameters queryParameters, Boolean 
      returnProxies)
  at NHibernate.Loader.Loader.DoList(ISessionImplementor session, QueryParameters
      queryParameters)

1 个答案:

答案 0 :(得分:2)

我假设您无法修改原始数据库的表结构(这可能是理想的,但可能会破坏其他代码)

我可以看到一种解决方法,根据锁定原件的方式略有不同。

根据原始表在数据库中创建MS Access查询,别名为“Active?”一些理智的东西。

select foo, bar, [Active?] as Active
from insane_table

您应该能够将MS Access Query对象视为表,只要它不复杂。

如果您真的无法触摸原始数据库,我会创建第二个MS Access数据库,并链接到原始数据库中的表(文件 - &gt;外部数据 - &gt;旧表中的链接表版本) - 在新的数据库中创建一个执行相同别名技巧的查询。