62,046
社区成员
发帖
与我相关
我的任务
分享
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Data.Linq;
namespace Ciseer.BLL
{
/// <summary>
/// Linq to sql操作基类
/// </summary>
/// <typeparam name="TEntity">实体类类型</typeparam>
/// <typeparam name="TDataContext">具体的DataContext类型</typeparam>
public abstract class BaseBLL<TEntity, TDataContext>
where TEntity : class, new()
where TDataContext : DataContext, new()
{
/// <summary>
/// DataContext的子类
/// </summary>
protected TDataContext dataContext;
/// <summary>
/// 公共操作方法类
/// </summary>
public BaseBLL()
{
dataContext = new TDataContext();
dataContext.Log = LogWriter.Instance.TextWriter;
}
/// <summary>
/// 一个筛选器,定义怎么样使用实体的ID进行读取,删除操作
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
protected abstract Func<TEntity, bool> GetPredicate(string id);
/// <summary>
/// 添加记录
/// </summary>
/// <param name="entity"></param>
public void Insert(TEntity entity)
{
dataContext.GetTable<TEntity>().InsertOnSubmit(entity);
SubmitChanges();
}
/// <summary>
/// 删除记录
/// </summary>
/// <param name="id"></param>
public void Delete(string id)
{
TEntity entity = GetEntity(id);
if (entity != null)
{
dataContext.GetTable<TEntity>().DeleteOnSubmit(entity);
SubmitChanges();
}
}
/// <summary>
/// 修改记录
/// </summary>
/// <param name="entity"></param>
public void Update(TEntity entity)
{
if (entity != null)
{
SubmitChanges();
}
}
/// <summary>
/// 获取一条记录
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public TEntity GetEntity(string id)
{
return dataContext.GetTable<TEntity>().SingleOrDefault(GetPredicate(id));
}
/// <summary>
/// 查询
/// </summary>
/// <param name="predicate">查询筛选器</param>
/// <returns></returns>
public IList<TEntity> Select(Func<TEntity, bool> predicate)
{
return dataContext.GetTable<TEntity>().Where(predicate).ToList();
}
/// <summary>
/// 更新到数据库
/// </summary>
protected virtual void SubmitChanges()
{
try
{
dataContext.SubmitChanges();
}
catch(ChangeConflictException)
{
dataContext.ChangeConflicts.ResolveAll(RefreshMode.KeepCurrentValues);
dataContext.SubmitChanges();
}
}
}
}