2010-07-19 60 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

相关问题