c# - 控制器根据模型变量删除表中的行
问题描述
我有一个 HttpPost 控制器,它将学校模型预订添加到学校数据库中(它保存了学校名称、学校日期、学校 ID 等信息)。现在我需要删除 Dates Db 中与刚刚输入 School Db 的日期相同的行,例如,如果输入的 School 模型日期是 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 模型(日期 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 列。
提前致谢
解决方案
你需要的是 lamda 表达式,也可以使用First
orFirstOrDefault
更改此行
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
推荐阅读
- node.js - 如何忽略 git push 上的公用文件夹?
- java - onCreateViewHolder 与 android.support.v7 中的 onCreateViewHolder 发生冲突
- javascript - 如何将自定义属性添加到 FullCalendar 中的每个时间段单元格?
- json - 使用新键名聚合的 JSON 数组合并
- python - 分页自定义 Json
- c - 当我删除 c = getchar() 部分时,为什么默认语句在案例之后起作用?
- c - 计数器变量问题
- java - 如何从 MediaStore 获取一些歌曲数据?
- arrays - 如何在邮递员中分解正文请求 - 使用 laravel
- linux - 如何在c ++中修复对...的未定义引用