2010-07-19 68 views
0

只是一個匆匆的新/短暫性NHibernate的實體的ID生成策略......我有我的映射類之一以下ID生成策略:跳繩時的ID已經提供

<id name="UID" type="System.Guid"> 
    <column name ="UID" sql-type ="uniqueidentifier" /> 
    <generator class="guid.comb" /> 
</id> 

有問題的實體涉及同步/合併行爲,因此必須擁有全局唯一標識符。

當首次在客戶端應用程序上創建實體時,它將分配UID屬性,使其與服務器上的等效實體的值相同。

但是,上述ID生成器策略會覆蓋爲新/瞬態實體提供的任何值。

什麼是修復?我是否必須刪除生成器策略並分配自己的GUID?或者,發電機策略可配置爲僅在需要時生成guid.comb

回答

0

我認爲你可以通過使UID成爲一個私人字段並通過屬性控制訪問來實現這一點。

public class MyClass 
{ 
    private Guid _uid; 

    protected MyClass() { // parameterless ctor for NH } 

    public MyClass(Guid uid) { _uid = uid; // assign on creation } 

    public Guid Uid 
    { 
     get { return _uid; } 
     private set { // do nothing or compare _uid to Guid.Empty and set } 
    } 
} 
+0

好,謝謝,我會嘗試這一點,並儘快給您:) – Rabid 2010-07-19 22:11:17

+0

不幸的是NHibernate的似乎更新它的內部實體狀態與所生成的UID,導致以下異常:實例的 標識csl.Risk.Structure.RiskClass從12ae645e-c50f-4fc5-b0ff-9db900bd9a4e更改爲42e565c7-8dd3-416f-89a2-9db801086d93;第一個guid是生成的,第二個是指定的。 Bummer :( – Rabid 2010-07-20 10:32:28

+0

新的答案:您將不得不刪除發電機策略並分配您自己的GUID。:-) – 2010-07-20 11:04:59