把ORM封装成一个类(linq to entity)
很多人使用ORM层都是针对每个数据库表建立相应的类,导致工作量很大,代码重复很多。下面给大家介绍使用linq to entity封装一个公用的ORM类。
首先声明一个接口:
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);
注:其实只要一个主类就可以实现了,增加其他类是为了减少耦合!
浙公网安备 33010602011771号