一、问题
上文中提到,动软提供了数据库的基本操作功能,但是往往需要添加新的功能来解决实际问题,比如GetModel,通过id去查对象:
这个功能就需要进行改进:往往程序中获取的是实体的其他属性,比如用户登录的时提供账号名和密码,需要根据账户名(唯一)去获取数据库中的实体信息,而不是 id 。
二、解决
通过id查对象和通过其他属性查对象应该是非常类似的,可以 “照葫芦画瓢 ”!
1、先在BLL中添加函数,这里利用的是函数重载(参数类型不同)
对比上下两个函数,参数不同而已。
2、在DAL中先找到GetModel函数
很显然,拷贝后,简单修改一下就可以使用利用账号名查找 的GetModel函数了
3、添加代码:
public Maticsoft.Model.user GetModel(string username)
{
StringBuilder strSql=new StringBuilder();
strSql.Append("select id,userID,password,userName from user ");
strSql.Append(" where userID=@username");
MySqlParameter[] parameters = {
new MySqlParameter("@userName", MySqlDbType.VarChar)
};
parameters[0].Value = username;
Maticsoft.Model.user model=new Maticsoft.Model.user();
DataSet ds=DbHelperMySQL.Query(strSql.ToString(),parameters);
if(ds.Tables[0].Rows.Count>0)
{
return DataRowToModel(ds.Tables[0].Rows[0]);
}
else
{
return null;
}
}
DAL里两个函数的关系:
由此,对动软生成的功能进行了扩展。比如登录时候的验证代码:
[HttpPost]
public ActionResult Login(string msg)
{
JObject jobject = JObject.Parse(msg);
string username = (string)jobject["username"];
string password = (string)jobject["password"];
Maticsoft.BLL.user bll = new Maticsoft.BLL.user();
string pwd1 = UserCookie.Encrypt(password);
Maticsoft.Model.user mod = bll.GetModel(username);
if (mod == null)
{
return Content("error");
}
if (password != null)
{
string pwd = UserCookie.Encrypt(password);
if (pwd == mod.password)
{
UserCookie.WriteCookie(mod);
return Content("OK");
}
else
return Content("error");
}
return Content("error");
}
其中: Maticsoft.Model.user mod = bll.GetModel(username);
则是利用提交的用户名(唯一)去获取数据库中对应记录的信息。(拓展功能)
以上有对密码加密、写入Cookie等功能,后文再介绍。