1
我正在更新一些從流暢映射範例到自動映射範例的映射。我有一個類命名組,其中用於標識列當前流利的映射是這樣的:如何編寫使用序列的自動映射約定
Id(x => x.Id, "ID")
.GeneratedBy
.Native("GROUPS_SEQ");
在HBM看起來像這樣得到的:
<id name="Id" type="System.Int64, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<column name="ID" />
<generator class="native">
<param name="sequence">GROUPS_SEQ</param>
</generator>
</id>
這與我們的Oracle數據庫,並與偉大工程測試使用SQLite。不幸的是,我無法弄清楚如何創建一個IIdConvention公約,它會給我帶來同樣的結果。這一步我已經得到了:
public class PrimaryKeyConvention : IIdConvention
{
public void Apply(FluentNHibernate.Conventions.Instances.IIdentityInstance instance)
{
string pluralized = Inflector.Net.Inflector.Pluralize(instance.EntityType.Name);
string underscored = Inflector.Net.Inflector.Underscore(pluralized);
string uppercased = underscored.ToUpper();
string sequenceName = string.Format("{0}_SEQ", uppercased);
instance.Column("Id");
instance.UnsavedValue("0");
instance.GeneratedBy.Native(sequenceName);
}
}
不幸的是,最後一行將導致編譯錯誤,因爲喜歡它的流暢映射做的.Native方法不接受一個序列名稱字符串。有沒有人有任何建議如何最好地解決這個問題?
謝謝!