2013年11月30日星期六
2013年11月29日星期五
多层架构+MVC+EF+AUTOFAC+AUTOMAPPER - 我佛慈悲纠结
最近使用ligerui搭建了一个简单的教务管理demo,将重要的地方记录,也希望能帮到有这方面需要园友。
一、目录
1、多层架构+MVC+EF+AUTOFAC+AUTOMAPPER;
2、MVC中验证码的实现(经常用,记录备用)
二、正文
多层架构中等以上规模以上的系统用得比较多,此demo功能不多,出于抱着学习的态度搭建了一个多层架构,并加入现在很流行的依赖倒转(autofac)、对象映射工具(automapper)。
话说没图你说个J8,先上框架图:
Model层中Entity存放数据库实体,使用code first,ViewModel存放界面展示模型。DAL层中IDAO存放接口,EFDAO实现IDAO。BLL结构与DAL类似,接口+实现。WEB层就是我们的UI层了,在这个框架中,WEB层使用MVC。什么,MVC不就是多层架构嘛,怎么还把它放Web层呢?MVC并不等同于多层架构,有这样疑问的同学,请在园内搜索相关文章。Infrastructure层是我们的基础设施层,我把一些常用的工具类封装后放入其中,方便其它地方调用。
IDao中定义了一个公共基类,基类中定义所有子类都会用到的查询方法:
2 {
3 public interface IBaseDao<T>
4 {
5 #region 查询普通实现方案(基于Lambda表达式的Where查询)
6 /// <summary>
7 /// 获取所有Entity
8 /// </summary>
9 /// <param name="exp">Lambda条件的where</param>
10 /// <returns></returns>
11 IEnumerable<T> GetEntities(Func<T, bool> exp);
12
13 /// <summary>
14 /// 计算总个数(分页)
15 /// </summary>
16 /// <param name="exp">Lambda条件的where</param>
17 /// <returns></returns>
18 int GetEntitiesCount(Func<T, bool> exp);
19
20 /// <summary>
21 /// 分页查询(Linq分页方式)
22 /// </summary>
23 /// <param name="pageNumber">当前页</param>
24 /// <param name="pageSize">页码</param>
25 /// <param name="orderName">lambda排序名称</param>
26 /// <param name="sortOrder">排序(升序or降序)</param>
27 /// <param name="exp">lambda查询条件where</param>
28 /// <returns></returns>
29 IEnumerable<T> GetEntitiesForPaging(int pageNumber, int pageSize, Func<T, string> orderName, string sortOrder, Func<T, bool> exp);
30
31 /// <summary>
32 /// 根据条件查找
33 /// </summary>
34 /// <param name="exp">lambda查询条件where</param>
35 /// <returns></returns>
36 T GetEntity(Func<T, bool> exp);
37
38
2013年11月28日星期四
pam_env.so
用户名:d伪装d 文章数:40 评论数:6
访问量:5192:4952:484:3 注册日期:2011-02-25
OS version:Red Hat Enterprise Linux Server release 6.4
Kernel version:2.6.32-358.el6.x86_64
-------------------------------------------------------------------------
准备工作:
[root@Zhai ~]# env | grep pam_env_test1
[root@Zhai ~]# env | grep pam_env_test2
[root@Zhai ~]# env | grep pam_env_test3
[root@Zhai ~]# env | grep pam_env_test4
[root@Zhai ~]# su - pam_test1
[pam_test1@Zhai ~]$ env | grep pam_env_test1
[pam_test1@Zhai ~]$ env | grep pam_env_test2
[pam_test1@Zhai ~]$ env | grep pam_env_test3
[pam_test1@Zhai ~]$ env | grep pam_env_test4
验证1:
[root@Zhai ~]# vi /etc/pam.d/su
auth required pam_unix.so account required pam_unix.so session required pam_env.so conffile= /etc/security/pam_env .conf |
[root@Zhai ~]# vi /etc/security/pam_env.conf
pam_env_test1 DEFAULT=Zhai_kang pam_env_test2 DEFAULT= "Zhai_kang 2013" pam_env_test3 DEFAULT= "Zhai_kang 201311" OVERRIDE=${pam_env_test1} pam_env_test4 DEFAULT=zhai_kang:201311\ |
验证2:
[root@Zhai ~]# cat /etc/security/pam_env.conf
pam_env_test1 DEFAULT=Zhai_kang pam_env_test2 DEFAULT= "Zhai_kang 2013" pam_env_test3 DEFAULT= "Zhai_kang 201311" OVERRIDE=${pam_env_test1} pam_env_test4 DEFAULT=zhai_kang:201311\ |
[root@Zhai ~]# vi /etc/environment
pam_env_test4= "----Zhai_kang V----" pam_test5= "Kang_Zhai 2013" |
[root@Zhai ~]# vi /etc/pam.d/su
auth required pam_unix.so account required pam_unix.so session required pam_env.so conffile= /etc/security/pam_env .conf envfile= /etc/environment readenv=1 |
验证3:
[root@Zhai ~]# cat /etc/security/pam_env.conf
pam_env_test1 DEFAULT=Zhai_kang pam_env_test2 DEFAULT= "Zhai_kang 2013" pam_env_test3 DEFAULT= "Zhai_kang 201311" OVERRIDE=${pam_env_test1} pam_env_test4 DEFAULT=zhai_kang:201311\ |
[root@Zhai ~]# cat /etc/environment
pam_env_test4= "----Zhai_kang V----" pam_test5= "Kang_Zhai 2013" |
[root@Zhai ~]# vi /etc/pam.d/su
auth required pam_unix.so account required pam_unix.so session required pam_env.so conffile= /etc/security/pam_env .conf envfile= /etc/environment readenv=1 user_envfile=.pam_environment user_readenv=1 |
[pam_test1@Zhai ~]$ vi .pam_environment