2017-02-13 95 views
2

我們使用Guid's作爲至少一半表格的標識符。對於其他表格,可以使用更多「自然」標識符,以便我們可以從自然聚集索引中獲益。我們注意到Guids的使用在數據庫中導致了很多開銷,因爲它們不是順序的。CodeFluent中的順序GUID

有沒有人在Codefluent中實現Sequential Guids,或試過?你能分享你的方法和/或代碼嗎?

+0

A 「序列的Guid」 是一個矛盾。所以不行。 – Gustav

+0

古斯塔夫,有很多關於連續指導的文檔。例如,請閱讀http://www.siepman.nl/blog/post/2013/10/28/ID-Sequential-Guid-COMB-Vs-Int-Identity-using-Entity-Framework.aspx。 –

+1

謝謝,不知道那個。似乎是_SQL Server_ special,所以我在您的問題中添加了_SQL Server_標記。 – Gustav

回答

2

您可以在C#中使用UuidCreateSequential生成一個新的順序guid,並將其分配給構造函數中的屬性(OnAfterCreate規則)。

的CodeFluent實體模型:

<cf:entity name="Customer"> 
    <cf:property name="Id" cfom:newGuidOnNew="false" key="true" /> 
    <cf:property name="Name" /> 
    <cf:rule typeName="OnAfterCreate" /> 
</cf:entity> 

自定義代碼,以產生一個連續GUID:

partial class Customer 
{ 
    void OnAfterCreate() 
    { 
     Id = SequentialGuid.NewGuid(); 
    } 
} 

static class SequentialGuid 
{ 
    [DllImport("rpcrt4.dll", EntryPoint = "UuidCreateSequential")] 
    public static extern Guid NewGuid(); 
} 
+0

謝謝meziantou,那就是我一直在尋找的! –

+0

@PeterdeBruijn - 這不會改變很多,需要改進:https://blogs.msdn.microsoft.com/dbrowne/2012/07/03/how-to-generate-sequential-guids-for- sql-server-in-net /但無論如何,我不知道它將如何在一段時間「順序」,並從不同的機器。如果需要「順序性」,則必須使用身份而不是指導 –