ASP .NET MVC с ADO .NET вызывает проблемы? - PullRequest
1 голос
/ 22 сентября 2011

Я новичок в 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 () не фиксирует его в базе данных."в этом случае мой контекст ADO .NET объявлен следующим образом:

    ActivesEntities db = new ActivesEntities();

ActivesEntities имеет это объявление:

    public partial class ActivesEntities : ObjectContext { ... }

Ответы [ 2 ]

1 голос
/ 01 октября 2011

Прежде всего, я бы порекомендовал вам не вызывать db.SaveChanges, пока вам действительно не понадобится сохранить объект Entity в середине серии транзакционных шагов.

Поскольку 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 ..

0 голосов
/ 22 сентября 2011

вы используете сущность Framework, верно?он немного отличается от ADO.NET (он использует его, но это не на 100% одно и то же), мы должны добавить тег EF к вопросу.

сказал так, почему вы вызываете db.SaveChanges дважды?Я бы не назвал его в начале вашего метода редактирования.

также, как я вижу в некоторых примерах EF, вы можете использовать Add, а не AddObject.

.:

Как: добавлять, изменять и удалять объекты

Последнее, ваши свойства StartTime и EndTime объекта имеют тип TimeSpan, а не datetime?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...