我有一个HttpPost控制器,该控制器将School模型预订添加到Schools Db(保存诸如School Name,School Date,School Id之类的信息)。现在我需要删除日期Db中的行,该日期与刚输入School Db的日期相同的日期,例如如果输入的学校模型日期为13/07/2019,我想在Dates Db中找到日期为-13/07/2019的行,然后从表中删除该行
到目前为止,我的控制器是
[HttpPost]
public ActionResult Booking(School model)
{
db.Schools.Add(model);
db.SaveChanges();
//make chosen school date unavailable in datepicker
Datepicker date = db.Dates.Find(model.Date);
db.Dates.Remove(date);
db.SaveChanges();
return RedirectToAction("Booking");
}
学校模型(学校Db上下文):
namespace BookingSys.Models
{
public class School
{
public DateTime Date { get; set; }
public int Id { get; set; }
public string Name { get; set; }
public string Email { get; set; }
public int PhoneNumber { get; set; }
}
}
DatePicker模型(Date Db上下文):
namespace BookingSys.Models
{
public class Datepicker
{
public DateTime Date { get; set; }
public int Id { get; set; }
public int LecturerId { get; set; }
public string Comment { get; set; }
}
}
当我在“视图”中单击“提交”以创建School模型时,当前出现以下错误:
System.ArgumentException:'主键值之一的类型与实体中定义的类型不匹配。有关详细信息,请参见内部异常。 参数名称:keyValues' EntitySqlException:参数类型'Edm.Int32'和'Edm.DateTime'与该操作不兼容。在WHERE谓词附近,第1行,第62列。
预先感谢
答案 0 :(得分:1)
您需要的是lamda表达式,还可以使用First
或FirstOrDefault
更改此行
Datepicker date = db.Dates.Find(model.Date);
收件人
Datepicker date = db.Dates.First(m => m.Date == model.Date);
OR
//if you are not sure if the date exists in both tables
Datepicker date = db.Dates.FirstOrDefault(m => m.Date == model.Date);
// then check for null before deleting
Find()
需要表的主键的值,并且您需要获取数据托架的日期