【Design】DbSession设计 数据访问层的入口

DbSession 是数据访问层的入口

拥有所有Dal实例

public class DbSession
{
    public IUserInfoDal UserInfoDal
    {
        get { return DalFactory.GetUserInfoDal(); }
    }

    public IOrderInfoDal OrderInfoDal
    {
        get { return DalFactory.GetOrderInfoDal(); }
    }


    public int SaveChanges()
    {
       return DbContextFactory.GetCurrentDbContext().SaveChanges();
    }
}

 

BaseDal中

去除所有SaveChanges

public T Add(T entity)
{
    Db.Set<T>().Add(entity);
    //Db.SaveChanges();
    return entity;
}

 

SaveChanges

提交到数据库工作由数据访问层提到业务逻辑层

数据批量提交,减少数据提交次数,提高性能

 

在业务逻辑中

public class UserInfoService
{
    DbSession dbSession = new DbSession();

    public UserInfo Add(UserInfo userInfo)
    {
        dbSession.UserInfoDal.Add(userInfo);
        dbSession.SaveChanges();
        return userInfo;
    }
}

之前的方式是添加每一个用户都与数据库交互一次,现在这种方式添加10个用户,一次性提交,减少数据库压力

 

为了降低耦合性,可以定义接口IDbSession

public interface IDbSession
{
    IUserInfoDal UserInfoDal { get; }
    IOrderInfoDal OrderInfoDal { get; }

    int SaveChanges();
}

DbSession实现IDbSession接口

public class DbSession: IDbSession

 

为了共用实例,可以定义工厂模式

public class DbSessionFactory
{
    //一个请求共用一个DbSession
    public static IDbSession GetCurrentDbSession()
    {
        IDbSession db = CallContext.GetData("DbSession") as IDbSession;
        if (db == null)
        {
            db = new DbSession();
            CallContext.SetData("DbSession", db);
        }

        return db;
    }
}

然后在业务逻辑层中,直接定义接口,减少耦合性

public class UserInfoService
{
    IDbSession dbSession = DbSessionFactory.GetCurrentDbSession();

    public UserInfo Add(UserInfo userInfo)
    {
        dbSession.UserInfoDal.Add(userInfo);
        dbSession.SaveChanges();
        return userInfo;
    }
}

 

 

 

课程通过实际项目融入常用开发技术架构,讲授风格独特,提供详细上课日志及答疑,赠送配套的项目架构源码注释详细清晰且表达通俗,均能直接在实际项目中应用,正真的物超所值,价格实惠 任务作业: 综合运用《C#/.Net企业级系统架构设计实战精讲教程》课程所学知识技能设计一个学生成绩管理系统的架构。要求: 1.系统基于MVC的三层架构,各层单独建不同的解决方案文件夹。 2.采用Model First开发方式,设计架构时只需要设计学生表(TbStudent)和课程表(TbCourse)。学生表必须有的字段是ID、stuName、age;课程表必须有的字段是ID、courseName、content。 3.数据访问层采用Entity Framework或NHibernate来实现,必须封装对上述表的增删改查方法。 4.必须依赖接口编程,也就是必须要有数据访问层的接口层、业务逻辑层的接口层等接口层。层层之间必须减少依赖,可以通过简单工厂或抽象工厂。 5.至少采用简单工厂、抽象工厂、Spring.Net等技术中的2种来减少层与层之间的依赖等。 6.封装出DbSession类,让它拥有所有Dal层实例和SaveChanges方法。 7.设计数据访问层及业务逻辑层主要类的T4模板,以便实体增加时自动生成相应的类。 8.表现层要设计相关的控制器和视图来验证设计的系统架构代码的正确性,必须含有验证增删改查的方法。 9.开发平台一定要是Visual Studio平台,采用C#开发语言,数据库为SQL Server。 10.提交整个系统架构的源文件及生成的数据库文件。 (注意: 作业需写在CSDN博客中,请把作业链接贴在评论区,老师会定期逐个批改~~)
相关推荐
©️2020 CSDN 皮肤主题: 精致技术 设计师:CSDN官方博客 返回首页