2010-03-11 48 views
0

我有一個問題。我使用NHibernate和MySql。在我的實體中,我使用Id(PK)作爲我的商業邏輯使用,Guid(作爲複製)。所以我BaseDomain:與MySQL的Nhibernate Guid MySQL

public class BaseDomain 
{ 
    public virtual int Id { get; set; } 
    public virtual Guid Guid { get; set; } 
    public class Properties 
    { 
     public const string Id = "Id"; 
     public const string Guid = "Guid"; 
    } 
    public BaseDomain() { } 
} 

我使用域名:

public class ActivityCategory : BaseDomain 
{ 
    public ActivityCategory() { } 
    public virtual string Name { get; set; } 
    public new class Properties 
    { 
     public const string Id = "Id"; 
     public const string Guid = "Guid"; 
     public const string Name = "Name"; 
     private Properties() { } 
    } 
} 

映射:

<class name="ActivityCategory, Clients.Core" table='Activity_category'> 
    <id name="Id" unsaved-value="0" type="int"> 
     <column name="Id" not-null="true"/> 
     <generator class="native"/> 
    </id> 
    <property name="Guid"/> 
    <property name="Name"/> 
</class> 

但是,當我插入我的實體:

[Test] 
    public void Test() 
    { 
     ActivityCategory ac = new ActivityCategory(); 
     ac.Name = "Test"; 
     using (var repo = new Repository<ActivityCategory>()) 
      repo.Save(ac); 
    } 

我總是得到「00000000 -0000-0000-0000-000000000000'在我的Guid領域。 我應該怎麼做才能生成正確的Guid。可能會映射?

非常感謝!

回答

1

從NHibernate的角度看,您應該設置一個GUID C#或告訴NHibernate的,它是由數據庫生成的。

在前一種情況下,設置在構造函數中的GUID屬性。

public class BaseDomain 
{ 
    public BaseDomain() 
    { 
     Guid = Guid.NewGuid(); 
    } 
} 

您映射屬性whose value is generated in the database這樣。根據如何生成值,您可能還需要從插入語句中排除該屬性。

<class name="ActivityCategory, Clients.Core" table="Activity_category"> 
    <id name="Id" not-null="true" > 
     <generator class="native" /> 
    </id> 
    <property name="Guid" generated="insert" insert="false" update="false" /> 
    <property name="Name" /> 
</class> 
+0

非常感謝您的回答。我想通過db生成guid。試試你的變體生成=「插入」,但再次獲得'00000000-0000-0000-0000-000000000000'。我做錯了什麼? – 2010-03-11 10:54:17

+0

您可能需要該列在插入語句中爲空或不存在。我已經更新了答案,將其從插入中排除。 – 2010-03-11 15:20:22

+0

這個變化之後,我已經有了: NHibernate的:INSERT INTO clients.Activity_category(名稱)VALUES ;? P0 = '測試' NHibernate的(P0):SELECT LAST_INSERT_ID() NHibernate的:SELECT activityca_.Guid爲Guid0_ FROM clients.Activity_category activityca_ WHERE activityca_.Id =?p0;?p0 = 4 NHibernate:UPDATE clients.Activity_category SET Guid =?p0,Name =?p1 WHERE Id =?p2;?p0 = 00000000-0000-0000-0000- 000000000000,?p1 ='Test',?p2 = 4 – 2010-03-12 06:32:30