带有 ADO .NET 的 ASP .NET MVC 会导致问题吗?

Posted

技术标签:

【中文标题】带有 ADO .NET 的 ASP .NET MVC 会导致问题吗?【英文标题】:ASP .NET MVC with ADO .NET causing issues? 【发布时间】:2011-11-22 14:01:33 【问题描述】:

我是 ADO .NET 和 MVC 的新手,我正在尝试做一些简单的事情,我正在编辑“DailyReport”,它基本上代表工作报告。

这是我的相关控制器模式:

    //
    // GET: /DailyReport/Edit/5

    public ActionResult Edit(int id, int weeklyReportID, int day)
    

        WeeklyReport weeklyReport = (
                                      from WeeklyReport wr in db.WeeklyReports 
                                      where wr.Id == weeklyReportID select wr)
                                      .FirstOrDefault();

        ViewBag.Week = weeklyReport.Week;
        ViewBag.Day = day;

        return View();
    

    //
    // POST: /DailyReport/Edit/5

    [HttpPost]
    public ActionResult Edit(DailyReport dailyReport, int weeklyReportID, int day)
    

        if (ModelState.IsValid)
        

            db.SaveChanges();

            if (dailyReport == null)
            

                dailyReport = new DailyReport();
                dailyReport.StartTime = new TimeSpan(7, 0, 0);
                dailyReport.EndTime = new TimeSpan(7 + 8, 0, 0);
                dailyReport.Day = day;

                db.DailyReports.AddObject(dailyReport);
                db.SaveChanges();

            

            WeeklyReport weeklyReport = (
                                         from WeeklyReport wr in db.WeeklyReports 
                                         where wr.Id == weeklyReportID select wr)
                                         .FirstOrDefault();

            if (!weeklyReport.DailyReport.Any(dr => dr.Id == dailyReport.Id))
            
                weeklyReport.DailyReport.Add(dailyReport);
            

            dailyReport.WeeklyReport = weeklyReport;

            db.SaveChanges();

            return RedirectToAction("Edit", 
                                    "WeeklyReport", 
                                     new  
                                           id = weeklyReportID, 
                                           week = weeklyReport.Week, 
                                           year = weeklyReport.Year 
                                         );

        

        return View(dailyReport);
    

当我编辑日期时间值时,它不会被保存。在我调试它的 HttpPost 部分中,确实更改了对象以反映这些更改,但调用 db.SaveChanges() 不会将其提交到数据库。

Edit 在这种情况下,“db”是我的 ADO .NET 上下文,声明方式如下:

    ActivesEntities db = new ActivesEntities();

ActivesEntities 有这个声明:

    public partial class ActivesEntities : ObjectContext  ... 

【问题讨论】:

顺便说一句,与问题无关,让控制器直接调用数据库绝不是一个好主意......将你的代码分成几层:***.com/questions/7510396/… 我以后会记住这一点。谢谢。 啊,是的,这确实是相关的。我更新了问题。 我仍然需要上述问题的帮助。 【参考方案1】:

您正在使用实体框架对吗?它与 ADO.NET 有点不同(它使用它但不是 100% 相同的东西),我们应该在问题中添加标签 EF。

这么说,你为什么要打两次db.SaveChanges?我不会在你的 Edit 方法的顶部调用它。

另外,正如我在一些 EF 示例中看到的,您可以使用 Add 而不是 AddObject

检查这个:

How to: Add, Modify, and Delete Objects

最后一件事,您的对象的 StartTime 和 EndTime 属性是 TimeSpan 类型而不是日期时间?

【讨论】:

Davide:您有权自己添加 EF 标签,知道吗? 当然,但首先需要他的回答,看起来他使用 EF 但只是想听听他的意见 ;-) 我不认为是英孚。我认为它是 ADO .NET。我从默认更改为使用 LiNQ。 既然不是EF,你能帮帮我吗? 原始ADO.NET中没有dbcontext,所以我猜一定是EF!【参考方案2】:

首先,我建议您不要调用db.SaveChanges,直到您确实需要在一系列事务步骤中间保存一个实体对象..

因为 Entity Framework 支持一次性保存所有 EntityContext 对象!

我认为您可以尝试像这样更改代码,

[HttpPost]
public ActionResult Edit(DailyReport dailyReport, int weeklyReportID, int day)


    if (ModelState.IsValid)
    

        if (dailyReport == null)
        
            dailyReport = new DailyReport();
            dailyReport.StartTime = new TimeSpan(7, 0, 0);
            dailyReport.EndTime = new TimeSpan(7 + 8, 0, 0);
            dailyReport.Day = day;

            db.DailyReports.AddObject(dailyReport);
        

        WeeklyReport weeklyReport = (from WeeklyReport wr in db.WeeklyReports where wr.Id == weeklyReportID select wr).SingleOrDefault();
        if (!weeklyReport.DailyReport.Any(dr => dr.Id == dailyReport.Id))
        
            weeklyReport.DailyReport.Add(dailyReport);
        

        dailyReport.WeeklyReport = weeklyReport;

        db.SaveChanges();

        return RedirectToAction("Edit", "WeeklyReport", new  id = weeklyReportID, week = weeklyReport.Week, year = weeklyReport.Year );

    

我认为如果要更新实体对象,则需要调用SingleOrDefault 而不是FirstOrDefault。我在 Linq2Sql 上这样做了..

【讨论】:

以上是关于带有 ADO .NET 的 ASP .NET MVC 会导致问题吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何在带有 ADO.NET 的 ASP.NET Core MVC 中使用 jQuery Ajax 自动完成

ado.net和asp.net区别?

asp.net和ado.net有啥区别?

能说一下ADO.NET 和.NET,还有asp.NET的区别吗?

带有 asp.net mvc 应用程序的 WCF 服务

asp.net中的ADO.NET实体框架适用于不同的数据库及其性能