小型项目(1)

首先说下文件夹分布
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语句会变成
Delete from table Where _ID=1;
Delete from table Where _ID=2;
Delete from table Where _ID=3;
增加了压力所以我们可以重写这个方法写一个数据工厂下面直接贴代码了
 public interface IDbSession
    {
        //每张表对应的实体仓储
        IDepartmentDao DepartmentFactoryget; }
        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 strSqlDbParameter[] 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 strSqlSystem.Data.Common.DbParameter[] parameters)
        {
            //Ef4.0的执行方法 ObjectContext
            //封装一个执行SQl脚本的代码
            //return EFContextFactory.GetCurrentDbContext().ExecuteFunction(strSql, parameters);
            //EF5.0的执行方法
            return EFContextFactory.GetCurrentDbContext().Database.ExecuteSqlCommand(strSqlparameters);
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值