LINQ TO SQL项目实战---用户登录篇
最近网上看了一些关于Linq to sql 方面的资料,怎么说呢,感觉网上写的都挺不错的,但总感觉, 那些仅仅是个例子,只能当练习用,如果真的当作项目作,你能放心通过拖拉,让系统生成代码的过程么?那样做,快是快了点,可如果你的系统稍微做点修改,你看到那些自动生成的代码,估计每个人都会晕,更别说修改了。
对数据库操作,一般我们都会用到用到用户登录这个模块,通过输入用户名、密码,进行验证,通过用户所属角色,对对用户进行相应的操作。由于考虑到系统的分层。因此将各个模块进行了独立(我系统架构学的也不是太好,有不好的地方,欢迎大家批评指正。)
数据访问层(DAL):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Linq;
using System.Configuration;
namespace Team.DBUtility
...{
/**////<summary>
/// 数据库底层操作类
///</summary>
publicsealedclass DLinqHelper
...{
/**////<summary>
/// 连接数据库字符串
///</summary>
privatestaticstring ConnectionString = ConfigurationManager.ConnectionStrings["TeamConnectionString"].ConnectionString;
privatestatic DataContext MyDataContext =new DataContext(ConnectionString);
/**////<summary>
/// 获取数据内容
///</summary>
publicstatic DataContext GetDataContext
...{
get
...{
return MyDataContext;
}
}
}
}
为了简单,我建立的数据表包含的字段有用户姓名、用户登录代码,用户密码,用户角色字段。以下为用户登录信息表代码:
/**//*==============================================================*/
/**//* Table: USER_INFO */
/**//*==============================================================*/
createtable USER_INFO (
NAME varchar(100) notnull,
CODE varchar(20) notnull,
ROLE varchar(20) notnull,
PASSWORD varchar(20) notnull,
CONTENT varchar(100) null,
constraint PK_USER_INFO primarykeynonclustered (CODE)
)
go
Linq To Sql 和NHibernate 差不多,说白了都是个O/R ,因此我们也需要一个类 对应数据表的映射文件。代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Linq.Mapping;
using System.Data.Linq;
namespace Team.Model
...{
/**////<summary>
/// 登录用户信息
///</summary>
[Table(Name="User_Info")]
publicclass UserInfo
...{
私有成员#region 私有成员
privatestring _name;
privatestring _code;
privatestring _role;
privatestring _password;
privatestring _content;
#endregion
[Column(Name ="Name", DbType ="varchar(100) Not Null")]
publicstring Name
...{
get
...{
return _name;
}
set
...{
_name = value;
}
}
[Column(Name ="Code", IsPrimaryKey =true, DbType ="varchar(20) Not Null")]
publicstring Code
...{
get
...{
return _code;
}
set
...{
_code = value;
}
}
[Column(Name ="Role", DbType ="varchar(20) Not NUll")]
publicstring Role
...{
get
...{
return _role;
}
set
...{
_role = value;
}
}
[Column(Name ="Password", DbType ="varchar(20) Not NUll")]
publicstring Password
...{
get
...{
return _password;
}
set
...{
_password = value;
}
}
[Column(Name ="Content", DbType ="varchar(100) Null", CanBeNull =true)]
publicstring Content
...{
get
...{
return _content;
}
set
...{
_content = value;
}
}
/**////<summary>
/// 构造函数
///</summary>
///<param name="code">登录代码</param>
///<param name="password">登录密码</param>
public UserInfo(string code, string password)
...{
this._code = code;
this._password = password;
}
/**////<summary>
/// 默认构造函数
///</summary>
public UserInfo()
...{
}
}
}
为了让系统调理清晰,我们不再Model名字空间下进行查询,添加等操作,我的想法是,另外新建一个类UserManagerl类。代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Linq;
namespace Team.webUtility
...{
/**////<summary>
/// 登录用户信息管理
///</summary>
publicclass UserManager:IDatabase,IDateItemExist
...{
private Table<Model.UserInfo> _user;
private WebHelper<Model.UserInfo> myUser;
/**////<summary>
/// 用户是否登录成功(readonly)
///</summary>
publicbool UserLogin
...{
get
...{
return _user.Any(q => q.Code == myUser.GetInfo.Code && q.Password == myUser.GetInfo.Password);
}
}
来源: http://lib.csdn.net/article/dotnet/41959