2014-09-19 39 views
0

我正在使用StructureMap進行依賴關係解析。我遇到了一個我不知道如何解決的問題,因爲唯一的方法是製作表單發佈,我知道最終會沒有依賴注入,從而否定了在我的項目中使用StructureMap的全部本質。 錯誤是我的IdbContext模型中沒有Add方法。以下是我的方法。DbContext和HTTPPost動作中的接口

我有定義的命名模塊型號如下

public class Module 
    { 
     public virtual int ID { get; set; } 
     public virtual string Name { get; set; } 
     public virtual DateTime? DateCreated { get; set; } 
     public virtual string ModuleDescription { get; set; } 
    } 

和接口定義如下。

public interface ISolnetDataSource 
    { 
     IQueryable<Module> Modules { get; } 
     void Save(); 
    } 

一個的DbContext像下面

 public class CMSDB : DbContext, ISolnetDataSource 
     { 
     public CMSDB() : base("DefaultConnection") 
      { 

      } 

     public DbSet<Module> Modules { get; set; } 

     void ISolnetDataSource.Save() 
      { 
      SaveChanges(); 
      } 

      IQueryable<Module> ISolnetDataSource.Modules 
      { 
       get { return Modules; } 
      }    
     } 

和我的控制器定義爲

 [HttpPost] 
    public ActionResult Index(CreateModulesViewModels module) 
    { 
     ViewBag.ListModule = _db.Modules.ToList(); 

     if (ModelState.IsValid) 
     { 
      var model = new CreateModulesViewModels(); 

      var CreateModule = new Module(); 
      CreateModule.Name = module.Name; 
      CreateModule.ModuleDescription = module.ModuleDescription; 
      CreateModule.DateCreated = DateTime.Now; 
      //_db.modules.Add(CreateModule); 
      _db.Save(); 
      return View(model); 
     } 
     return View(module); 
    } 

我有這樣的挑戰是,我could'nt做_db.modules.Add(CreateModule)(在註釋行中控制器),以添加新的記錄。我做錯了什麼。我想用最好的方法來做到這一點。

回答

0

什麼:

_db.modules.Entry(CreateModule).State = System.Data.EntityState.Added; 
+0

'Entry'沒有也可以。我所能訪問的只是從外觀上看的IQueryable方法。 – Peter 2014-09-20 09:07:00

+0

所以也許只是做一個手動的SQL查詢。上下文有這個選項。 – ilans 2014-09-20 09:08:19

+0

嗯...我想避免使用它。我想用該項目儘可能多地學習LINQ和MVC結構。 – Peter 2014-09-20 09:10:40