如何在 ASP.NET MVC 4 Web 应用程序中使用 LINQ 更新两个表
本文关键字:更新 LINQ 两个 ASP NET MVC 应用程序 Web | 更新日期: 2023-09-27 18:18:59
我正在制作图书馆管理系统项目,其中我有一个Deposit
控制器,用于存放早期发行的书籍。使用两个表:
- 书籍数据
- 存书发行
BooksData
包含所有书籍信息,并带有一个BookStatus
标志,该标志将"A"设置为"可用",将"I"设置为已发行。 BookDepositIssue
具有BookID
,这在表和IssueDate, DepositDate, and DueDate
中都很常见。
现在在我的存款控制器中,我正在检查BookStatus
标志是否为"I"; 这意味着已发行。而且还DueDate<= DateTime
.今天,这样就不会产生罚款。但是我无法制作正确的代码,请提供帮助。如调试器所示,var v 变为空,因此不会进入 if 条件。数据库已经发行了标志为"I"的书籍,那么为什么它不执行条件呢?
控制器部分
[HttpPost]
public ActionResult Deposit (BookDepositIssue deposit)
{
if (ModelState.IsValid)
{
using (LibraryEntities dc = new LibraryEntities())
{
var v = dc.BooksDatas.Where(a=> a.BookStatus.Equals("I") && a.BookID.Equals(deposit.BookID) && deposit.DueDate<=DateTime.Today).FirstOrDefault();
if(v!=null)
{
v.BookStatus="A";
deposit.depositDate = DateTime.Today;
}
UpdateModel(dc.BooksDatas);
UpdateModel(dc.BookDepositIssues);
dc.SaveChanges();
}
}
}
模型零件
Model class 1:
public partial class BookDepositIssue
{
public int SequenceNo {get; set;}
public string BookID {get; set;}
public string ID {get; set;}
public Nullable<System.DateTime> IssueDate {get; set;}
public Nullable<System.DateTime> DueDate {get; set;}
public Nullable<System.DateTime> DepositDate {get; set;}
}
Model Class 2:
public partial class BooksData
{
public string BookID {get; set;}
public BookName {get; set;}
public BookGenre {get; set;}
public BookStatus {get; set;}
public Author {get; set;}
}
试试这个 - 假设你在BookDepositIssue
到"BookDepositIssue"之间有一个名为bookData
的导航属性。 如果你没有,你应该这样做。
替换此部分:
var v = dc.BooksDatas.Where(a=> a.BookStatus.Equals("I") && a.BookID.Equals(deposit.BookID) && deposit.DueDate<=DateTime.Today).FirstOrDefault();
if(v!=null)
{
v.BookStatus="A";
deposit.depositDate = DateTime.Today;
}
UpdateModel(dc.BooksDatas);
UpdateModel(dc.BookDepositIssues);
dc.SaveChanges();
有了这个:
if(deposit.bookData.BookStatus == "I" && deposit.DueDate<=DateTime.Today){
deposit.bookData.BookStatus = "A";
deposit.depositDate = DateTime.Today;
}
dc.SaveChanges();
让我知道这是否适合您。 如果没有,请具体说明哪些地方不起作用。