2011-05-10 17 views
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方法不接受一個序列名稱字符串。有沒有人有任何建議如何最好地解決這個問題?

謝謝!

回答

1

的GeneratorInstance.cs文件已經包含了實現以下方法:

void Native(string sequenceName); 
void Native(string sequenceName, Action<ParamBuilder> paramValues); 

方法並不在IGeneratorInstance.cs接口暴露出來。我繼續並添加了它們,這使我可以創建我需要的主鍵約定。就在我可以告訴他們工作正常。不幸的是,我公司的IT安全部門已經適合關閉防火牆上的一堆端口,這阻止了我通過github回饋這個端口。所以如果有人想提交我的更新,我將不勝感激。

謝謝!

相關問題