首先声明一个接口:
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); |