2016-03-06 79 views
-1

我正在asp.net的MVC 5和要實現3種方法Topic類:添加方法類DbSet <TEntity>

class Topic : IDisposable 
{ 
     public Topic() { } 
     private TopicViewModels Model { get; set; } 
     private string Flag { get; set; } 

     public void Add(TopicViewModels model) 
     { 
      Model = model; 
      Flag = "Add"; 
     } 

     public void Update(TopicViewModels model) 
     { 
      Model = model; 
      Flag = "Update"; 
     } 

     public void Remove(TopicViewModels model) 
     { 
      Model = model; 
      Flag = "Remove"; 
     } 

     public async Task<int> SaveChangesAsync() 
     { 
      using (var db = new MyDbContext()) 
      { 
       switch (Flag) 
       { 
        case "Add": 
         db.Topics.Add(Model); 
         break; 
        case "Update": 
         var topic = await db.Topics.SingleAsync(x => x.Id == Model.Id);  
         topic = Model; 
         break; 
        case "Remove": 
         db.Topics.Remove(Model); 
         break; 
       } 
       return await db.SaveChangesAsync(); 
      } 
     } 

     public void Dispose() 
     { 
      throw new NotImplementedException(); 
     } 
} 

我的問題:我該怎麼申報方法

public virtual TEntity Update(TEntity entity); 

in class DbSet<TEntity>

我想萬一「更新」來實現:

switch (Flag) 
{ 
    case "Update": 
     db.Topics.Update(Model); 
     break; 
} 

我的子問題:是否有另一種方式來調用方法SaveChangesAsync正好不使用標誌?

+0

我強烈建議將你的標誌從'string'改爲'enum'。 –

回答

1

你可以做類似的事情;

public void Update<T>(T entity) where T:class 
{ 
     db.Entry<T>(entity).State = EntityState.Modified; 
     db.SaveChanges(); 
}