2009-08-01 4 views
1

Как добиться общей операции сохранения и обновления с использованием дженериков и отражения в C#?C# - общая операция CRUD

Я добившиеся данные получить, используя некоторые ссылки из here...

У меня нет много времени, чтобы узнать, как технологии NHibernate/LINQ/Entity Frameowrk и т.д. на данный момент. По какой-то причине мне нужно быстрое решение этой проблемы.

+1

Я разочаровывает вас - это * не * проблема с быстрыми решениями. –

ответ

4

Я думаю, что вам лучше использовать ORM-LINQ to SQL, LINQ to Entities, LINQ to nHibernate - вместо того, чтобы повторно изобретать все это. По сути, то, что вы просите совета по этому поводу, уже сделано для вас в этих рамках/технологиях. Мой совет - потратить некоторое время на изучение инструментов, которые уже существуют, и применить свою творческую энергию для повышения ценности вашего приложения, используя уже разработанные инструменты для мирской работы. Если, конечно, вы не собираетесь внедрять ORM, потому что существующие неадекватны для ваших нужд. Я подозреваю, что это не так, иначе вы уже знаете, как использовать размышления, чтобы делать то, что вы просите.

+0

plz см. Обновление. – 2009-08-01 15:52:04

+0

По моему опыту, обучение использованию LINQ-to-SQL быстрее, чем создание собственного механизма, основанного на отражениях, для выполнения CRUD. По существу, вы перетаскиваете свои таблицы на поверхность дизайнера и используете созданный контекст/сущности. Вам нужно будет добавить свою бизнес-логику, но вы можете сделать это с частичной реализацией классов на сущности. – tvanfosson

0

Использование помощника DbContext из GenericType

public class ContextHelper<T> : IContextHelper<T> 
    { 
     //Instantiate your own EntityFrameWork DB context here, 
     //Ive called the my EntityFramework Namespace 'EF' and the context is named 'Reporting' 
     private EF.DataContext DbContext = new EF.DataContext(); 
     public bool Insert<T>(T row) where T : class 
     { 
      try 
      { 
       DbContext.Set<T>().Add(row); 
       DbContext.SaveChanges(); 
       return true; 
      } 
      catch(Exception ex) 
      { 
       return false; 
      } 
     } 
     public bool Update<T>(T row) where T : class 
     { 
      try 
      { 
       DbContext.Set<T>().AddOrUpdate(row); 
       DbContext.SaveChanges(); 
       return true; 
      } 
      catch (Exception ex) 
      { 
       return false; 
      } 
     } 
     public bool Delete<T>(T row) where T : class 
     { 
      return Update(row); //Pass an entity with IsActive = false and call update method 
     } 
     public bool AddRows<T>(T[] rows) where T : class 
     { 
      try 
      { 
       DbContext.Set<T>().AddOrUpdate(rows); 
       return true; 
      } 
      catch (Exception ex) 
      { 
       return false; 
      } 
     } 

И тогда экземпляр и вызвать класс здесь

public class MainLogicClassExample //Catty out logi operations on objects and update DataBase 
{ 
    public void NewEmailRecipient(EF.EmailRecipient recipient) 
    { 
     // logic operation here 

     EntityToDB(recipient); 
    } 
    public void NewReportRecipient(EF.ReportRecipient recipient) 
    { 
     // logic operation here 

     EntityToDB(recipient); 
    } 
    public void UpdateEmailRecipient(EF.EmailRecipient recipient) 
    { 
     // logic operation here 

     UpdateEntity(recipient); 
    } 

    public void UpdateReportRecipient(EF.ReportRecipient recipient) 
    { 
     // logic operation here 

     UpdateEntity(recipient); 
    } 
    // call generic methods to update DB 
    private void EntityToDB<T>(T entity) where T : class 
    { 
     var context = new ContextHelper<T>(); 
     context.Insert(entity); 
    } 

    private void UpdateEntity<T>(T entity) where T : class 
    { 
     var context = new ContextHelper<T>(); 
     context.Update(entity); 
    } 
} 

Я добавил DemoProject к GitHub здесь: https://github.com/andyf1ynn/EntityFramwork-Generic-Type-DAL