2013-02-11 55 views
2

我有一個名爲 '投標' 和下面的實體是有關這個問題的代碼:爲什麼Guid在保存記錄時會發生變化?

類:

public class Bid 
{ 
    public virtual Guid Id { get; set; } 
} 

映射文件:

<id name="Id" column="Id" type="Guid"> 
    <generator class="guid.comb" /> 
</id> 

數據類型在Oracle中:

Raw(16) 

當我保存一個類型爲'Bid'的新對象時(Repository.Sa VE(BID))由C#生成的ID是

db27b33c75314b41b171a1620130061a 

和一個保存在Oracle表是

3CB327DB3175414BB171A1620130061A 

如果你仔細看,ID下半年是一樣的,但上半場不是。

有人能告訴我如何更改我的代碼,以便由C#生成的Id得到保存,因爲它?

我已經嘗試了生成器類'分配'和'guid.native',並嘗試在oracle中將數據類型更改爲varchar2(32),但無濟於事。

+0

如果將列類型更改爲字符串(在映射文件中並在類中)並將值手動分配給新的GUID,該怎麼辦? – 2013-02-11 13:08:02

+0

我會嘗試,但數據庫中的數據類型不會改變的解決方案將是理想的。我不介意更改映射文件或類中的類型。 – mridula 2013-02-11 13:10:11

+0

什麼是NHibernate版本? oracle方言已被設計爲將C#Guid映射到RAW16。 – 2013-02-11 13:13:09

回答

2

第一部分也是一樣的,但字節順序不同。反轉的字節順序在每個前三組下面,你會看到:

db27b33c 7531 4b41 b171a1620130061a

3CB327DB 3175 414B B171A1620130061A

這裏有一些這方面的討論:https://nhibernate.jira.com/browse/NH-1429

+0

我發現在oracle中有一個叫做hextoraw()的函數。必須像這樣將Id插入到表中 - 「insert into table_name(id)values(hextoraw(guid_goes_here))'。反正我們可以告訴nhibernate在將值插入Id列時調用這個函數嗎? – mridula 2013-02-12 04:46:33

+0

我已經試過這個解決方案,但行爲沒有改變。 – mridula 2013-02-13 04:43:08

0

對於其他來自Google,也是nhibernate和mysql新手的人,我更改了.hbm.xml文件

<id name="Id" type="Guid"> 
    <generator class="guid" /> 
</id> 

<id name="Id" type="Guid"/> 

和我的guid退出變化。

相關問題