zoukankan      html  css  js  c++  java
  • 把ORM封装成一个类(linq to entity)

    首先声明一个接口:

    using System;
    using System.Collections.Generic;
      
    namespace Demode.Repository
    {
        public interface IDBRepository<TEntity> : IDisposable
         where TEntity : class
        {
            System.Data.Objects.ObjectSet<TEntity> DataSource { get; }
            void Save(IEnumerable<TEntity> entitys);
            void Delete(TEntity entity);
            void Insert(TEntity entity);
            void Save(TEntity entity);
            System.Collections.Generic.IList<TEntity> Select(int start, int limit);
            void SaveChanges();
        }
    }

      

    主类代码实现接口:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
      
    namespace Demode.Repository
    {
        public class SQLProxy<TEntity> : Demode.Repository.IDBRepository<TEntity> where TEntity : class
            {
      
                public System.Data.Objects.ObjectSet<TEntity> DataSource { get { return this.Context.CreateObjectSet<TEntity>(); } }
      
                protected Models.loginDemodeEntities Context { get; set; }
      
                internal SQLProxy(Models.loginDemodeEntities context)
                {
                    this.Context = context;
                }
      
                public IList<TEntity> Select(int start, int limit)
                {
                    return this.DataSource.Skip(start).Take(limit).ToList();
                }
      
                public void Insert(TEntity entity)
                {
                    this.DataSource.AddObject(entity);
                }
      
                public void Delete(TEntity entity)
                {
                    //this.Attach(entity);
      
                    dynamic temp = entity;
                    temp.Flag = false;
      
                }
      
                public void Save(IEnumerable<TEntity> entitys)
                {
                    foreach (var i in entitys)
                        this.Save(i);
                }
      
                public void Save(TEntity entity)
                {
                    this.Attach(entity);
      
                }
      
                protected void Attach(TEntity entity)
                {
                    this.DataSource.Attach(entity);
                    this.Context.Refresh(System.Data.Objects.RefreshMode.ClientWins, entity);
      
                }
                public void SaveChanges()
                {
                    this.Context.SaveChanges();
                }
      
                public void Dispose()
                {
                    this.Context.Dispose();
                }
            }
    }

      最后创建一个工厂类减少耦合:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
      
    namespace Demode.Repository
    {
        public class DBFactory
        {
            public static IDBRepository<TEntity> Create<TEntity>() where TEntity : class
            {
                IDBRepository<TEntity> db = new SQLProxy<TEntity>(new Models.loginDemodeEntities());
                return db;
            }
        }
    }

      到了这里ORM代码就写完了,需要操作哪个表,只要传人相应的对象就可以了,是不是很简单!

    下面是一个使用的实例:

    Repository.IDBRepository<Models.User> a = Repository.DBFactory.Create<Models.User>();  //使用工厂类,声明一个对象
                Models.User use = new Models.User();
                use.use_account = userName;
                use.use_password = password;
                a.Insert(use);           //调用封装好类的方法
                a.SaveChanges();         //调用封装好类的方法
    return Request.CreateResponse(HttpStatusCode.BadRequest);

    http://www.cnblogs.com/zhyc/archive/2013/04/14/3020511.html

  • 相关阅读:
    linux C程序中获取shell脚本输出(如获取system命令输出)
    Vue实现网页在线拍照和上传 幸福n
    c# thread数线程的创建多线程(一)
    C#开启异步 线程的四种方式(二)
    web学习网站
    C#中的set和get方法
    C# 多线程之Task任务(三)
    Taro3 扫描不同二维码参数不同,但是热启动之后参数不变
    Taro 弹窗阻止小程序滑动穿透(亲测有效) tabbar数据缓存不更新 入口场景值不同
    《Webpack+Babel入门与实例详解》出版了
  • 原文地址:https://www.cnblogs.com/zcm123/p/3032760.html
Copyright © 2011-2022 走看看