很多人使用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);
|