我有一个遗留的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)
答案 0 :(得分:2)
我假设您无法修改原始数据库的表结构(这可能是理想的,但可能会破坏其他代码)
我可以看到一种解决方法,根据锁定原件的方式略有不同。
根据原始表在数据库中创建MS Access查询,别名为“Active?”一些理智的东西。
select foo, bar, [Active?] as Active
from insane_table
您应该能够将MS Access Query对象视为表,只要它不复杂。
如果您真的无法触摸原始数据库,我会创建第二个MS Access数据库,并链接到原始数据库中的表(文件 - &gt;外部数据 - &gt;旧表中的链接表版本) - 在新的数据库中创建一个执行相同别名技巧的查询。