仓储模式之工厂

//首先声明一个接口:
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);
  
    
//注:其实只要一个主类就可以实现了,增加其他类是为了减少耦合!


知识共享许可协议
《仓储模式之工厂》常伟华 创作。
采用 知识共享 署名-相同方式共享 3.0 中国大陆 许可协议进行许可。
相邻依据:发表时间
  • 多说评论
  • 签名
  • 新浪微博
  • 默认评论
  • Tab Header 5

0 条评论 / 点击此处发表评论

Tab Content 5

开发技术


开发平台和工具

sitemap     216.01ms