2016-05-12 9 views
0

セッション内のレコード(GuildName)を既に作成してコンテキストに添付しておけば、代わりにコンテキストからコンテキストを取得することができます。重複を作成することはできますが、重複を作成しないように継ぎ目を修正することはできません。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人の名前を取ったが、通常、そこに私が考えることができるいくつかの100kの

唯一のことは、GetGuildFromNameの検索方法の変更を保存し呼び出すことですが、私は気持ちを持っています意図したとおりに動作しない可能性がありますが、パフォーマンスは大きな要因ではありませんが、パフォーマンスを損なう可能性がありますが、私は物事を合理的に実行するように練習しようとします。

私はあなたがこのような文脈(db.GuildName.Add(guildName)にごnewGuildNameを追加したことがないと思います

答えて

0

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

これはそれだった、私はそれが自分自身を添付することを文字に追加して考えましたコンテキストは、これを行うときにdbに保存されますが、ルックアップのコンテキストにはありません – Toxicable

関連する問題