Ich habe den folgenden Code in C#:Ungewöhnliches Verhalten von Entity Framework
public int AddSynonymBL(String[] syns, String word, User user)
{
int dismissedCounter = 0;
foreach (var item in syns)
{
BusinessLayerStatus.StatusBL res = this.dataAccess.AddSynonymDA(item.Trim().ToLowerInvariant(), word.Trim().ToLowerInvariant(), user);
if (res == BusinessLayerStatus.StatusBL.SynonymNotAdded)
++dismissedCounter;
}
int numberOfFailures = dismissedCounter;
return numberOfFailures;
}
Und der folgenden Code ist für AddSynonymDA
Methode:
internal BusinessLayerStatus.StatusBL AddSynonymDA(string synonym, string word, User user)
{
try
{
Synonym newSyn = new Synonym()
{
Meaning = synonym
};
//The following if means that the searched word does not exist int the Searched table
if (this.context.Users.Where(a => a.Mail.Equals(user.Mail)).FirstOrDefault().Searcheds.Where(b => b.RealWord.Equals(word)).Count() == validNumberForKeyValues)
{
this.context.Users.Where(a => a.Mail.Equals(user.Mail)).FirstOrDefault().Searcheds.Where(b => b.RealWord.Equals(word)).FirstOrDefault().Synonyms.Add(newSyn);
this.context.SaveChanges();
return BusinessLayerStatus.StatusBL.SynonymAdded;
}
else
return BusinessLayerStatus.StatusBL.SynonymNotAdded;
}
catch (Exception ex)
{
ExceptionAction(ex);
return BusinessLayerStatus.StatusBL.SynonymNotAdded;
}
}
ich Entity Framework verwenden. Ich habe eine Tabelle, die eine ID, eine Wortspalte enthält. Beide haben zusammen eine eindeutige Schlüsseleinschränkung in der Datenbank. Mein main
Code ist wie folgt:
public static void Main()
{
EngineEntities context = new EngineEntities();
BusinessLogic bl = new BusinessLogic();
String[] s = new String[] { "java", "DB" };
Console.WriteLine(bl.AddSynonymBL(s, "Java", new User() { Mail = "media" }));
}
Wenn ich hinzufügen, einen Wert, der in der Tabelle alles existiert nicht in Ordnung ist, aber wenn ich hinzufügen, einen Wert, der bereits in der Tabelle vorhanden ist, this.context.SaveChanges();
im AddSynonymDA
Methode aufrufen, immer löst eine Ausnahme aus, die für die vorherige erste Ausnahme galt, die die erste Ausnahme verursachte, und der Datenbank wird nichts hinzugefügt, auch wenn sie nicht in der Datenbank vorhanden sind. Warum das?
Ich bekomme den folgenden Fehler, der zeigt, dass Java bereits existiert. Das Problem ist, dass Java für den ersten Anruf ist, als zweiten Anruf habe ich DB
nicht Java übergeben.
{ "Verletzung der UNIQUE KEY Einschränkung 'IX_Searched'. Doppelte Schlüssel in Objekt einfügen 'dbo.Searched'. Der doppelte Schlüsselwert (Java, 2). \ R \ nDie Anweisung wurde beendet." }
Haben Sie versucht, nach dem ersten Einfügen einen neuen Kontext zu erstellen? – hofmeister
@hofmeister nein, wie ich in 'Main' Methode erwähnt habe, habe ich nur einen Kontext und benutze das immer. Ist das falsch? – Media
Was ist diese Methode 'AddNewWordToSearchedBL'? –