2013-05-16 9 views
1

在下面的代碼中,我試圖將一個新的Facility用於我的設施表。 「Save」方法調用DbContext的SaveChanges()。 SaveChanges()執行後,我希望newFacility爲它生成一個Id,但它不會,也不會保存到數據庫。我可以在設施中添加新設施的方式有問題嗎?創建一個新的實體並調用SaveChanges將其保存到數據庫MVC

[HttpPost] 
      public ActionResult Create(CreateFacilityViewModel viewModel) 
      { 
       if (ModelState.IsValid) 
       { 
        var facilities = _db.Facilities; 
        var newFacility = new Facility(); 

        //newFacility.FacilityId = viewModel.FacilityId; 
        newFacility.FaclityName = viewModel.FaclityName; 
        newFacility.Address = viewModel.Address; 
        newFacility.City = viewModel.City; 
        newFacility.State = viewModel.State; 

        _db.Facilities.ToList().Add(newFacility); 

        _db.Save(); 

        return RedirectToAction("detail", "facility", new { id = newFacility.FacilityId }); 
       } 
       return View(viewModel); 
      } 

設施看起來是這樣..

public DbSet<Facility> Facilities { get; set; } 
    IQueryable<Facility> IGolfDataSource.Facilities 
     { 
      get { return Facilities; } 
     } 

回答

3

的問題是在這裏:

_db.Facilities.ToList().Add(newFacility); 

當你調用ToList它在內存中創建一個新的列表,然後你把你的新設施新,在內存中的列表。相反,你要直接添加新基金進入DbSet:

_db.Facilities.Add(newFacility); 
+0

添加在設施上不可用 –

+0

(可選)如果您不想將設施作爲DbSet公開。您可以在_db上創建AddFacility方法。在AddFacility Method中,您可以訪問DbSet 並使用它的Add方法。 – Kelly

1

變化

_db.Facilities.ToList().Add(newFacility); 

_db.Facilities.Add(newFacility); 

你要的對象添加到環境中,而不是一個列表。

+0

,如果添加上不可的設施無法使用 –

+0

,那麼你需要改變設施的類型上_db。它應該暴露爲DbSet。 – Kelly

+0

我正在通過返回IQueryable來暴露DbSet。請參閱上面的代碼 –

相關問題