我有一个使用C#
和NHibernate
的应用,它将支持SQL Server 2008
,SQL Server 2012
和Oracle
。我一直在使用流利的nhibernate来映射我的实体,我对如何映射ID有一些疑问。 Oracle仅支持Sequence,仅SQL Server 2008身份和Sql Server 2012。我想在Sql Server(2008和2012)中使用Identity和Oracle with Sequence在相同的代码上进行映射。
我应该如何映射ID以适用于所有数据库?
如果我在流畅的映射代码上有一些IF语句,那也没关系。看我的代码进行映射:
对于SQL:
Id(x => x.Id).GeneratedBy.Native();
对于Oracle:
Id(x => x.Id).GeneratedBy.Sequence("SQ_Customer");
PS:我不想要任何解决方法来实现它。我想要一个NHibernate/Fluent-NHibernate
解决方案来映射它。
答案 0 :(得分:8)
嗯,“Native”会根据使用的数据库自动选择Identity,sequence或HILO。
使用此xml映射,如果是Oracle,则应使用标识或序列sq_customer
:
<generator class="native" >
<param name="sequence">sq_customer</param>
</generator>
This post进一步描述了事情。