C # - общая операция CRUD - PullRequest
       13

C # - общая операция CRUD

1 голос
/ 01 августа 2009

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

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

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

Ответы [ 2 ]

4 голосов
/ 01 августа 2009

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

0 голосов
/ 21 июня 2016

Используйте помощник 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...