2016-05-12 11 views
0

Was ich möchte, ist, dass, wenn ich bereits den Datensatz (GuildName) in der Sitzung erstellt und an den Kontext angehängt haben, dann für EF es aus dem Kontext abrufen ein Duplikat zu erstellen, aber es kann nicht säumen, damit es kein Duplikat erzeugt.EF nicht Entität aus Kontext abrufen

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; 
    } 
} 

ich es nur 10 Namen für die Prüfung nehmen zu müssen, aber normalerweise gibt es ein paar 100k des

Das einzige, was ich denken kann, ist auf Suchverfahren von GetGuildFromName speichern Sie die Änderungen nennen, aber ich habe das Gefühl, dass es vielleicht nicht wie beabsichtigt funktioniert, aber für die Leistung schädlich sein kann, nicht, dass Leistung ein großer Faktor ist, aber ich mag es zu üben, Dinge vernünftig zu machen.

Antwort

0

Ich glaube, Sie nie Ihre newGuildName dem Kontext hinzufügen (db.GuildName.Add (Gildenname) wie folgt aus:

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

Das war es, dachte ich, indem es dem Charakter hinzu, dass es selbst anbringen würde der context, es dosent speichern in der db, wenn dies aber anscheinend nicht auf den kontext für die suche – Toxicable

Verwandte Themen