私はC#で、次のコードを持っている:私は、Entity Frameworkのを使用していますEntity Frameworkのの異常な動作
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;
}
}
:
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;
}
、次のコードは、AddSynonymDA
方法があります。私はId、単語列を含むテーブルを持っています。どちらもデータベース内にユニークなキー制約があります。次のように私のmain
コードは次のとおりです。
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" }));
}
私はAddSynonymDA
方法でthis.context.SaveChanges();
を呼び出し、すでにテーブル内に存在する値を追加するときは常に、テーブル内のすべてが正常であるが存在しませんが、値を追加するとき最初の例外を引き起こした前の最初の例外に対する例外をスローし、データベースに存在しない場合でも何もデータベースに追加されません。何故ですか?
Javaが既に存在することを示す次のエラーが表示されます。問題は、Javaが最初の呼び出しであることです.2番目の呼び出しとして、私はDB
Javaを渡しました。
{ "UNIQUE KEY制約の違反 'IX_Searched'。オブジェクトに重複するキーを挿入できません 'dbo.Searched'。重複したキー値がされた(Javaの、2)。\ r個の\のnこの文は終了しました。" }
最初の挿入が失敗した後に新しい 'context'を作成しようとしましたか? – hofmeister
@hofmeisterいいえ、私が 'Main'メソッドで言及したように、私はただ一つの文脈しか持たず、いつもそれを使用します。それは間違っていますか? – Media
このメソッドは 'AddNewWordToSearchedBL'ですか? –