2016-03-06 7 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); 

в классе DbSet<TEntity>?

То, что я хочу достичь в случае «Update»:

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(); 
} 
Смежные вопросы