如何在 ASP.NET MVC 4 Web 应用程序中使用 LINQ 更新两个表

本文关键字:更新 LINQ 两个 ASP NET MVC 应用程序 Web | 更新日期: 2023-09-27 18:18:59

我正在制作图书馆管理系统项目,其中我有一个Deposit控制器,用于存放早期发行的书籍。使用两个表:

  1. 书籍数据
  2. 存书发行

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;}
     }

如何在 ASP.NET MVC 4 Web 应用程序中使用 LINQ 更新两个表

试试这个 - 假设你在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();

让我知道这是否适合您。 如果没有,请具体说明哪些地方不起作用。