2010-07-02 107 views

回答

0

IMO實體框架沒有任何與NHibernate的生成器等價的東西。 EF中唯一可用的功能是可以設置爲Identity的StoreGeneratedPattern。 StoreGeneratedPattern只是意味着DB將分配一個鍵,並將該鍵作爲插入操作的一部分返回到EF上下文(與Guids相比較難)。

如果你想有一些相當於NHibernate的POID生成器,你必須重寫SaveChanges或在你的ObjectContext上處理SavingChanges。然後,您可以從您選擇的POID算法中爲所有插入的實體手動分配ID - 但必須實施該算法。

1

不幸的是,EF沒有像NHibernate那樣與POID生成器非常接近的東西,儘管我聽到有傳言說類似的功能將會包含在EF的下一個版本中。 (什麼?!?微軟選擇了一個競爭對手的好主意?不可思議!)

HiLo自己處理Lo部分不會太困難,但是Hi部分會很棘手,除非我們能夠獲得EF合作。這將需要微軟重構EF的部分內容,這可能是爲什麼沒有人試圖做到這一點,並將其作爲開源項目發佈在github或codeplex上。

與此同時,我們用於離線生成記錄然後在稍後同步的是全局唯一標識符。

var id = Guid.NewGuid(); 

然後將它分配給表的ID。這可以在SaveChanges中完成。

我知道它不如HiLo,但它和我們一樣接近。它仍然具有能夠離線工作並保證有效和唯一ID的優點。

2

感謝您的答案

我想我只需要等待:-)的EF在朝着正確的方向愛CTP5。

我需要評論「Rap」的答案。使用隨機Guid作爲索引可能會降低SQL Server上的性能,因爲每個插入的索引都會變得碎片化。 這是我從現實世界中學習的,當時我開始在一家新公司工作,這家公司在那裏有很大的SQL服務器性能問題。從guid移動到bigint解決了這個問題。而且無需一直重新索引。

+0

是的,的確如此。好的電話,@馬丁。我只是說因爲EF還沒有,所以我們現在已經有了。 – Rap 2011-01-02 15:22:26

相關問題