控制器基于模型变量删除表中的行

时间:2019-07-12 22:32:02

标签: c# asp.net asp.net-mvc linq

我有一个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列。

a busy cat

预先感谢

1 个答案:

答案 0 :(得分:1)

您需要的是lamda表达式,还可以使用FirstFirstOrDefault

更改此行

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()需要表的主键的值,并且您需要获取数据托架的日期