【问题标题】:controller to delete row in table based on model variable控制器根据模型变量删除表中的行
【发布时间】:2019-07-12 22:32:02
【问题描述】:

我有一个 HttpPost 控制器,它将学校模型预订添加到学校数据库中(它保存了学校名称、学校日期、学校 ID 等信息)。现在我需要删除 Dates 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");
    }

学校模型(Schools 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 模型(Dates 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; }
  }
}

当我在视图中单击提交以创建学校模型时,目前出现以下错误:

System.ArgumentException: '主键值之一的类型与实体中定义的类型不匹配。有关详细信息,请参阅内部异常。 参数名称:keyValues' EntitySqlException:参数类型“Edm.Int32”和“Edm.DateTime”与此操作不兼容。在 WHERE 谓词附近,第 1 行,第 62 列。

提前致谢

【问题讨论】:

  • 好的。那么您从日期表中删除日期的错误是什么?我真的不知道你的数据库的结构,但正在删除你真正想要的东西?为什么没有一个列说deleted并将一个项目标记为已删除?,删除后没有Ctrl+Z
  • @bosco 我不想删除 Dates Db 上下文中的日期字段,我想删除与 Schools Db 上下文中日期相同的行。例如如果输入的学校模型日期是 13/07/2019,我想在 Dates Db 中找到日期为 13/07/2019 的行,然后从表中删除该行
  • 好的。既然您仍想删除该行,那么您当前的代码有什么错误??
  • @Bosco 我已经更新了我原来的问题伙伴

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


【解决方案1】:

你需要的是 lamda 表达式,也可以使用 FirstFirstOrDefault

改变这一行

Datepicker date = db.Dates.Find(model.Date); 

Datepicker date = db.Dates.First(m => m.Date == model.Date); 

//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()需要表的主键值,需要获取databay Date

【讨论】:

    猜你喜欢
    • 2023-01-15
    • 2014-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多