开发者

ASP .NET MVC with ADO .NET causing issues?

I'm new to both ADO .NET and MVC, and I am trying to do something simple where I am editting a "DailyReport", which is basically representing a work-report.

Here's my relevant controller pattern:

    //
    // 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 
                    开发者_Go百科                     });

        }

        return View(dailyReport);
    }

When I am editting the datetime value, it doesn't get saved. In the HttpPost section when I debug it, the object is indeed changed to reflect these changes, but calling db.SaveChanges() doesn't commit it to the database.

Edit "db" in this case is my ADO .NET context, declared in the following way:

    ActivesEntities db = new ActivesEntities();

ActivesEntities has this declaration:

    public partial class ActivesEntities : ObjectContext { ... }


First of all, I would recommend you to not call the db.SaveChanges until you really need to save an Entity object in the middle of the series of Transactional Steps..

Because Entity Framework support saving all the EntityContext object in a single shot !

And I think you may try changing the code like this,

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

    }

I think using if you are Updating the entity object then you need to call SingleOrDefault and not FirstOrDefault. I do it like this on Linq2Sql..


you are using entity framework right? it's a bit different from ADO.NET (it uses it but those are not 100% same thing), we should add the tag EF to the question.

said so, why do you call db.SaveChanges twice? I would not call it at the top of your Edit method.

also, as I see in some EF examples, you can use Add and not AddObject.

check this one:

How to: Add, Modify, and Delete Objects

last thing, your StartTime and EndTime properties of the object are of type TimeSpan and not datetime?

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜