2011-09-22 44 views
1

我對ADO .NET和MVC都很陌生,我試圖做一些簡單的事情,我編輯一個基本上代表工作報告的「DailyReport」。ASP .NET MVC與ADO .NET導致的問題?

這裏是我的相關負責人模式:

// 
    // 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()不會將其提交到數據庫。

編輯 「DB」 在這種情況下我的ADO .NET的背景下,以下方式聲明:

ActivesEntities db = new ActivesEntities(); 

ActivesEntities有這樣的聲明:

public partial class ActivesEntities : ObjectContext { ... } 
+2

BTW和非相關的問題,有控制器直接調用數據庫絕不是一個好主意......將你的代碼分成層:http://stackoverflow.com/問題/ 7510396 /業務層三層架構/ 7510526#7510526 – balexandre

+0

我會在將來記住這一點。謝謝。 –

+0

在這種情況下會是什麼? –

回答

1

首先,我建議你不要叫db.SaveChanges直到你真的需要保存一個實體對象在一系列事務步驟的中間..

因爲實體框架的支持,並保存所有的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

您正在使用實體框架對?它與ADO.NET有些不同(它使用它,但這些並不是100%相同的東西),我們應該將標記EF添加到問題中。

這麼說,你爲什麼要撥打db.SaveChanges兩次?我不會在您的編輯方法的頂部調用它。

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

檢查這一項:

How to: Add, Modify, and Delete Objects

最後一件事,對象的開始時間你和結束時間屬性類型TimeSpan,而不是日期時間?

+0

Davide:你有權利自己添加EF標籤,你知道嗎? –

+0

當然,但首先需要他的回答,看起來他使用EF,但只是想聽到他;-) –

+0

我不認爲這是EF。我認爲它是ADO .NET。我從默認改爲擁有LiNQ。 –