有沒有人爲實體框架實現了HiLO密鑰生成器。HiLO for Entity Framework
瞭解更多關於HiLo的信息: 我建議您閱讀http://fabiomaulo.blogspot.com/2009/02/nh210-generators-behavior-explained.html以瞭解選擇身份的缺點。
有沒有人爲實體框架實現了HiLO密鑰生成器。HiLO for Entity Framework
瞭解更多關於HiLo的信息: 我建議您閱讀http://fabiomaulo.blogspot.com/2009/02/nh210-generators-behavior-explained.html以瞭解選擇身份的缺點。
IMO實體框架沒有任何與NHibernate的生成器等價的東西。 EF中唯一可用的功能是可以設置爲Identity的StoreGeneratedPattern。 StoreGeneratedPattern只是意味着DB將分配一個鍵,並將該鍵作爲插入操作的一部分返回到EF上下文(與Guids相比較難)。
如果你想有一些相當於NHibernate的POID生成器,你必須重寫SaveChanges或在你的ObjectContext上處理SavingChanges。然後,您可以從您選擇的POID算法中爲所有插入的實體手動分配ID - 但必須實施該算法。
不幸的是,EF沒有像NHibernate那樣與POID生成器非常接近的東西,儘管我聽到有傳言說類似的功能將會包含在EF的下一個版本中。 (什麼?!?微軟選擇了一個競爭對手的好主意?不可思議!)
HiLo自己處理Lo部分不會太困難,但是Hi部分會很棘手,除非我們能夠獲得EF合作。這將需要微軟重構EF的部分內容,這可能是爲什麼沒有人試圖做到這一點,並將其作爲開源項目發佈在github或codeplex上。
與此同時,我們用於離線生成記錄然後在稍後同步的是全局唯一標識符。
var id = Guid.NewGuid();
然後將它分配給表的ID。這可以在SaveChanges中完成。
我知道它不如HiLo,但它和我們一樣接近。它仍然具有能夠離線工作並保證有效和唯一ID的優點。
感謝您的答案
我想我只需要等待:-)的EF在朝着正確的方向愛CTP5。
我需要評論「Rap」的答案。使用隨機Guid作爲索引可能會降低SQL Server上的性能,因爲每個插入的索引都會變得碎片化。 這是我從現實世界中學習的,當時我開始在一家新公司工作,這家公司在那裏有很大的SQL服務器性能問題。從guid移動到bigint解決了這個問題。而且無需一直重新索引。
是的,的確如此。好的電話,@馬丁。我只是說因爲EF還沒有,所以我們現在已經有了。 – Rap 2011-01-02 15:22:26
是的,有人實施了HiLO for Entity Framework。我沒有,雖然測試它自己: http://joseoncode.com/2011/03/23/hilo-for-entityframework/
實體框架7的支持:https://channel9.msdn.com/Blogs/Seth-Juarez/Key-Generation-Strategies-in-Entity-Framework-7
public class ExampleContext : BaseContext {
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.ForSqlServerUseSequenceHiLo();
}
}
如果你使用SQL Server,可以考慮添加到SQL Server uniqueidentifier數據類型。 – 2010-12-03 13:00:11
你的問題到底是什麼? – Crisfole 2010-12-20 14:39:29