1. 問題点
上で述べたように、Dynamicsoft はデータベースの基本的な操作関数を提供しますが、多くの場合、ID によってオブジェクトをチェックするための GetModel など、実際的な問題を解決するための新しい関数を追加する必要があります。
この機能は改善する必要があります。多くの場合、ログイン時にユーザーが指定したアカウント名とパスワードなど、エンティティの他の属性がプログラムで取得され、データベース内のエンティティ情報はアカウント名に従って取得する必要があります。 (一意)、IDではありません。
2、解決する
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 の 2 つの関数間の関係は次のとおりです。
これにより、動的ソフト生成の機能が拡張されました。たとえば、ログイン時の確認コードは次のとおりです。
[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の書き込みなどの機能があります。