if文(S)バインドされているオブジェクトのプロパティは、データベースにすでにあるレコードの一致した場合にのみ実行する必要があり、以下:基本的に条件文は常に真である
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "ID,AID,Date,PostPreID")] OL oLevel)
{
if (ModelState.IsValid)
{
if(oLevel.PostPreID == 2)
{
if (db.OL.Any(x => DbFunctions.TruncateTime(x.Date) == DbFunctions.TruncateTime(oLevel.Date) && x.PostPreID == oLevel.PostPreID))
{
ModelState.AddModelError("PostPreID", "There is already a record for this Date!");
return View(oLevel);
}
else
{
db.OL.Add(oLevel);
db.SaveChanges();
return RedirectToAction("Index", new { id = oLevel.AID });
}
}
if(oLevel.PostPreID == 3)
{
if (db.OL.Any(x => DbFunctions.TruncateTime(x.Date) == DbFunctions.TruncateTime(oLevel.Date) && x.PostPreID == oLevel.PostPreID))
{
ModelState.AddModelError("PostPreID", "There is already a record for this Date!");
return View(oLevel);
}
else
{
db.OL.Add(oLevel);
db.SaveChanges();
return RedirectToAction("Index", new { id = oLevel.AID });
}
}
db.OL.Add(oLevel);
db.SaveChanges();
return RedirectToAction("Index", new { id = oLevel.AID });
}
return View(oLevel);
}
を、ユーザーは、特定の日付の場合にPostPreID
が2であるレコードを、データベースにすでにレコードがある場合は追加できません。PostPreID
は2です。同じ論理がPostPreID
は、私がデバッグしている3
に等しい、と私は、データベースがそれらのレコードが含まれていません知っている日付のPostPreID
のための両方の2と3で入力したときのために行くが、文が含む場合は何らかの理由でネスト.Anyメソッドは常にtrueに解決されます。
何か助けていただければ幸いです。
'DbFunctions.TruncateTime'は正しいですか?また、これをデバッグするには、 'db.OL.FirstOrDefault'を呼び出して、同じ式を渡して、あなたが期待していないレコードを見てください。 – David
'DbFunctions.TruncateTime'のソースコードを共有する –
@DavidPineこれはEFの一部です。https://msdn.microsoft.com/en-us/library/dn220142(v=vs.113).aspx – juharr