2016-04-22 29 views
4

我有一個簡單的實體。實體框架,我在之前添加了這個條目嗎?

public partial class Thing 
{ 
    public Thing() 
    {} 

    public int Id { get; set; } 
    public string Name { get; set; } 
} 

我將成千上萬的新條目插入到localDB數據庫中,但只會有幾個被捕獲的獨特的東西。 如果我在每次插入後都保存更改,那麼它將運行得非常慢,但是如果我沒有SaveChanges,那麼我無法分辨newThing.Name是否已經存在。 或者我可以嗎?我在檢查上下文與數據庫中vs vs preC/saveChanges存在的位置上相當模糊。任何人都可以爲我澄清這一點?

Thing newThing = new Thing(); 
newThing.Name = "MyName"; 

context.Things.Add(d); 

//returns null 
Thing myFirstThing = context.Things.FirstOrDefault(c => c.Name == newThing.Name); 

//returns false 
if (context.Detectors.Any(c => c.Name == newThing.Name)) 
{ //do some stuff} 

回答

0

我認爲你可以用你的DbContext上的ChangeTracker來做到這一點,但是,它可能會很慢。

//(warning: free-handing this): 
myContext.ChangeTracker.Entries<theEntityType>().Any(e => e.State == EntityState.Added && e.Entity.TheField == yourString); 

我認爲(或者相近的工作,但它可能會變得非常慢,因爲你要掃描收集每個調用(它會得到一個慢一點之後每增加 - 收集與1000的成員會燃燒大量蜱)

相反,你可以在字典中的實體添加到字典< yourString,theEntity >爲你添加。基於密鑰的查找O(1),所以即使你在字典中有一百萬個條目,查找速度非常快。當你保存實體以保持內存較輕時清除字典。

+0

感謝您的回覆。我想我會跟着你的字典的想法。只有400個獨特的條目。不過,我可能會使用列表。 – kurgaan

+1

@kurgaan很高興幫助。如果你使用List,你將無法獲得字典的性能。當你搜索一個列表時,它只是遍歷整個列表。如果使用Dictionary或Hashset,它不會執行簡單的循環 - 這更像是有一個索引,並且在查找時您將獲得更好的性能。 – JMarsch

相關問題