ASP.NET :- 使用单一视图从两个表中删除记录
Posted
技术标签:
【中文标题】ASP.NET :- 使用单一视图从两个表中删除记录【英文标题】:ASP.NET :- Deleting records from two tables using single view 【发布时间】:2020-05-30 03:31:30 【问题描述】:我想从 2 个表中删除数据。我正在使用实体框架。
这是课程。
[HttpPost]
public ActionResult Delete(int employeeId)
int id = employeeId;
MvcWebApp.DbModel.profile profile = dbContext.profiles.Find(employeeId);
dbContext.profiles.Remove(profile);
dbContext.SaveChanges();
regi regi = dbContext.regis.Find(id);
dbContext.regis.Remove(regi);
dbContext.SaveChanges();
return RedirectToAction("Index");
其中employeeId
是子表的列名,Id
是父表的列名。
MvcWebApp.DbModel.profile
这是类的完全限定名。
我得到profile
object null。
【问题讨论】:
ASP.NET 是一个 Web 框架,它不会读取或删除数据。您是在询问实体框架吗?为什么要调用SaveChanges
两次,而不是按需调用Remove
,最后只调用`SaveChanges?
@PanagiotisKanavos 因为我需要保存 2 个表的更改。
这不是SaveChanges
所做的 - 它保留了自上次调用以来的所有 更改。你只需要调用一次。此外,EF 处理的是实体,而不是表。如果与DeleteBehavior.Cascade
存在父子关系,则在调用SaveChanges
时删除父级将删除子级。
无论如何,这里的问题是什么?什么不起作用?如果 EmployeeID 没有匹配的个人资料,profiles.Find
将找不到任何东西。只需检查null
并继续下一步。 regis.Find
似乎也在使用 employeeID
作为 ID。对吗?
@PanagiotisKanavos 哦。但是为什么我在配置文件对象中得到空值..?
【参考方案1】:
需要在父对象中包含子表。
[HttpPost]
public ActionResult Delete(int id)
var parent = dbContext.regis.Include(p => p.profiles).SingleOrDefault(p => p.id == id);
foreach(var child in parent.profiles.ToList())
dbContext.profiles.Remove(child);
dbContext.SaveChanges();
return RedirectToAction("Index");
【讨论】:
【参考方案2】:我的建议是首先,看看你有没有提供你提供的 ID 的员工这是最简单的,我想一定没有!正如你所说,它返回null。 你得到所有输入的这个 NULL 吗?
其次,尝试在调试器模式下运行您的代码,在第一行放置一个断点以查看发送给方法的 EmployeeId 是什么。检查它可能是零,所以你的 POST 方法有问题
【讨论】:
以上是关于ASP.NET :- 使用单一视图从两个表中删除记录的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 jquery 从 asp.net 视图模型中动态删除行而不删除集合中的其余下一个对象
将 jQuery JSON 对象保存到 SQL 表中,而无需在 MVC ASP.NET Core 中创建视图模型类
在 ASP.NET MVC 5 中从数据库加载 Razor 视图
如何在 asp.net core 的其他表中添加数据和删除相同的数据?