首先说下文件夹分布
BusinessLogicLayer 业务逻辑层 存放 BLL和 IBLL
DataAccessLayer 数据层 存放 IDLL DLL
Domain 存放 EF和ViewModel
GUI 存放 LigerUI/EasyUI/EXTJS 及页面
Common 自定义扩展功能及我们需求的功能放在里面
从数据层开始
IBaseDao 定义通用的增删改查
然后为每张表定义一个接口 去继承 IBaseDao 此时每张表都拥有了增删改查的能力。
例如:
public interface IUserDao:IBaseDao<xjn_User>
public interface IUserRoleDao:IBaseDao<xjn_UserRole>
public interface IModuleDao:IBaseDao<xjn_Module>
EF中 有这么一个功能 xx.SaveChanges();
如果做批量删除的话 在sql中我们只需要和数据库交互一次例如 Delete from table where _ID in(1,2,3)
但是如果用SaveChanges的话 Sql语句会变成
但是如果用SaveChanges的话 Sql语句会变成
Delete from table Where _ID=1;
Delete from table Where _ID=2;
Delete from table Where _ID=3;
增加了压力所以我们可以重写这个方法写一个数据工厂下面直接贴代码了
public interface IDbSession
{
//每张表对应的实体仓储
IDepartmentDao DepartmentFactory{ get; }
IFavoriteDao FavoriteFactory { get; }
IModuleDao ModuleFactory { get; }
IModulePermissionDao ModulePermissionFactory { get; }
IPermissionDao PermissionFactory { get; }
IRoleDao RoleFactory { get; }
IRolePermissionDao RolePermissionFactory { get; }
IUserDao UserFactory { get; }
IUserRoleDao UserRoleFactory { get; }
//将当前应用程序与数据库的会话内所有实体的变化更新告诉数据库
int SaveChanges();
//执行Sql语句
//EF4.0的写法
//int ExcuteSql(string strSql, ObjectParameter[] parameters);
//EF5.0的写法
int ExcuteSql(string strSql, DbParameter[] parameters);
}
同时还应该定义一个数据工厂EFContextFacotry
public class EFContextFactory
{
//帮我们返回当前县城内的数据库上下文,如果线程内没有上下文那么就创建
//并且保证上线问实例在线程内部是唯一的
public static DbContext GetCurrentDbContext()
{
//CallContext:是线程内部唯一的独用的数据槽(一块内存空间)
//传递DbContext进去获取实例的信息,在这里进行强制转换。
DbContext dbContext = CallContext.GetData("DbContext") as DbContext;
//线程在数据槽里面没有此上下文
if (dbContext == null)
{
//如果不存在上下文的话,创建一个EF上下文
dbContext = new XjnPermissionEntities();
//我们在创建一个,放到数据槽中去
CallContext.SetData("DbContext", dbContext);
}
return dbContext;
}
}
好了下面开始进行DbSession的工作
public class DbSession : IDbSession
{
public IDepartmentDao DepartmentFactory { get { return new DepartmentEFDao(); } }
public IFavoriteDao FavoriteFactory { get { return new FavoriteEFDao(); } }
public IModuleDao ModuleFactory { get { return new ModuleEFDao(); } }
public IModulePermissionDao ModulePermissionFactory { get { return new ModulePermissionEFDao(); } }
public IPermissionDao PermissionFactory { get { return new PermissionEFDao(); } }
public IRoleDao RoleFactory { get { return new RoleEFDao(); } }
public IRolePermissionDao RolePermissionFactory { get { return new RolePermissionEFDao(); } }
public IUserDao UserFactory { get { return new UserEFDao(); } }
public IUserRoleDao UserRoleFactory { get { return new UserRoleEFDao(); } }
public int SaveChanges()
{
//调用EF上下文的SaveChanges方法
return EFContextFactory.GetCurrentDbContext().SaveChanges();
}
//执行Sql脚本的方法
public int ExcuteSql(string strSql, System.Data.Common.DbParameter[] parameters)
{
//Ef4.0的执行方法 ObjectContext
//封装一个执行SQl脚本的代码
//return EFContextFactory.GetCurrentDbContext().ExecuteFunction(strSql, parameters);
//EF5.0的执行方法
return EFContextFactory.GetCurrentDbContext().Database.ExecuteSqlCommand(strSql, parameters);
}
}