2016-05-12 56 views
0

我想要發生的事情是,如果我已經在會話中創建了記錄(GuildName)並將其附加到上下文中,則EF將從上下文中檢索它創建一個副本,但它不能縫以使它不創建重複。EF不從上下文中檢索實體

public static async Task ProcessNames() 
{ 
    var db = new SQLDbContext(); 
    db.Configuration.ProxyCreationEnabled = false; 

    var existingNames = db.CharacterNames.Include("GuildName").Include("RealmName").Take(10).ToList(); 
    var gatherGuildNameTaskList = (
      from name in existingNames 
      select GetGuildFromName(name, db)).ToList(); 

    await Task.WhenAll(gatherGuildNameTaskList); 
    db.SaveChanges(); 
} 


public static async Task GetGuildFromName(CharacterName characterName, SQLDbContext db) 
{ 
    var character = await ApiHelper.GetJsonFromUrlAsync<Character>(new Uri(URL)); 
    if (character.Guild == null) return; 

    //This is the call that appears to not be working as intended 
    var guildName = db.GuildName. 
     SingleOrDefault(x => x.RealmName.Name == character.Guild.Name) ?? new GuildName 
    { 
     Name = character.Guild.Name, 
     CharacterNames = new List<CharacterName>(), 
     RealmName = characterName.RealmName 
    }; 

    if (!guildName.Equals(characterName.GuildName)) 
    { 
     characterName.GuildName = guildName; 
    } 
} 

我只是有它需要10名進行測試,但通常有幾個10萬的

我能想到的唯一的事情就是調用節省的GetGuildFromName搜索方法的變化,但我有一種感覺,它可能無法按預期工作,但可能會對性能造成不利影響,而不是性能是一個巨大的因素,但我喜歡試圖讓事情合理地執行。

回答

0

我想你不是你newGuildName添加到上下文(db.GuildName.Add(guildName)是這樣的:通過將其添加到角色,它將自身附加到

var guildName = db.GuildName. 
     SingleOrDefault(x => x.RealmName.Name == character.Guild.Name); 
if (guildName ==null) 
{ 
    guildName = new GuildName 
     { 
     Name = character.Guild.Name, 
     CharacterNames = new List<CharacterName>(), 
     RealmName = characterName.RealmName 
     }; 
    db.GuildName.Add(guildName); 
} 
+0

這是它,我想上下文,它在這樣做時保存到數據庫,但顯然不適用於查詢的上下文 – Toxicable