2017-01-25 44 views
0

我需要生成一個隨機的int數,該數不存在於數據庫中以避免重複的數據。換句話說,我需要在生成生成的代碼之前檢查數據庫中的代碼是否不存在數據庫。實體框架,如何生成數據庫中不存在的隨機int數

這是我的實體看起來像:

public partial class User 
{ 
    public int Id { get; set; } 

    public string PhoneNumber { get; set; } 

    public string Code { get; set; } 

} 

,這裏是我生成代碼的方式:

 User user new User(); 
     Random random = new Random(); 
     user.Code = random.Next().ToString(); 
+4

你爲什麼這樣做你自己,你爲什麼不使用唯一的ID的生成和SQL服務器管理?如果你想要隨機的東西,可以使用[uniqueidentifier/guid](https://msdn.microsoft.com/en-us/library/ms187942.aspx) – Tanner

+0

你總是可以在'Id上面粘貼一個'[Key]'屬性財產。 –

+0

@坦納..我不需要一個ID,我只需要生成一個不存在於數據庫中的數字..如何檢查數據庫中的數字以及數據庫中已有數字如何生成另一個數字 – Tom

回答

0

由於@Tanner問,你爲什麼需要這個功能呢?

這將幫助我們指導您找到最佳解決方案。

有一些合理的用例(例如性能),您不希望往返數據庫來獲取您的實體的ID。

這就是說在大多數情況下,最好讓數據庫爲你處理這個問題,除非你有一個令人信服的理由不要。

要回答你的問題有兩種解決這個問題的方法。

A)改爲使用GUID。它們被設計成獨一無二的,你可以指定一個實體在你提交實體之前和之後識別它。由於圍繞使用GUIDS的性能問題,您可能仍希望使用int作爲主鍵。 B)使用HiLo密鑰生成策略。這將允許您在保存實體之前分配ID。此功能僅在.NET Core版本的Entity Framework(和nHibernate)中可用。

http://www.talkingdotnet.com/use-hilo-to-generate-keys-with-entity-framework-core/ https://channel9.msdn.com/Blogs/Seth-Juarez/Key-Generation-Strategies-in-Entity-Framework-7