17,740
社区成员
发帖
与我相关
我的任务
分享
public class 数据库{
string 数据库连接{get;set;}
#region 将表映射成类
#endregion
#region 将存储过程封装为方法
#endregion
}
public static class 表{
public static string TableName="table"'//对应的数据库表名
public static string IDField="ID";//ID字段对应的数据库ID字段
}
public static class Helper{
/// <summary>
/// 得到总数据量
/// </summary>
/// <param name="Table"></param>
/// <returns></returns>
public static string GetTableCount(string Table,string where)
{
return string.Format("select count(*) FROM {0} where 1=1 {1}", Table, where);
}
}
//调用实例
string sql=Helper.GetTableCount(表.TableName,$" and {表.IDField}=10");//$" and {表.IDField}=10这一句也会封装成方法,这里不扯远了,先用一个SQL片段代替
然后这个框架写了一部分之后我发现跟EF越来越像,甚至EF有很多地方比我想的跟周到,比如使用一个SQL上下文(IQueryable<T>),可以用方法来改变这个上下文,只是最后才将它生成SQL。只是EF封装的太多,涉及的东西也比较多,有很多我现在用不上的东西,所以我想学习下EF的实现,使用它的底层中纯粹的跟数据库有关的东西,来达到我要的效果。我刚才已经找到了EF的源代码,我要学习去了public virtual int web_serialUse(string serialNumber, Nullable<int> userid, string iP)
{
var serialNumberParameter =new SqlParameter("@SerialNumber", serialNumber);
var useridParameter = new SqlParameter("@Userid", userid);
var iPParameter = new SqlParameter("@IP", iP);
var result = new SqlParameter("@return", SqlDbType.Int);
result.Direction = ParameterDirection.ReturnValue;
SqlHelper.ExecuteNonQuery(Database.Connection.ConnectionString,CommandType.StoredProcedure, "web_serialUse",
serialNumberParameter, useridParameter, iPParameter, result);
return Convert.ToInt32(result.Value);
//var serialNumberParameter = serialNumber != null ?
// new ObjectParameter("SerialNumber", serialNumber) :
// new ObjectParameter("SerialNumber", typeof(string));
//var useridParameter = userid.HasValue ?
// new ObjectParameter("Userid", userid) :
// new ObjectParameter("Userid", typeof(int));
//var iPParameter = iP != null ?
// new ObjectParameter("IP", iP) :
// new ObjectParameter("IP", typeof(string));
//return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction("web_serialUse", serialNumberParameter, useridParameter, iPParameter);
}
namespace YundingDAL
{
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
public partial class THTreasureDBEntities : DbContext
{
public virtual int web_serialUse(string serialNumber, Nullable<int> userid, string iP)
{
var serialNumberParameter = serialNumber != null ?
new SqlParameter("SerialNumber", serialNumber) :
new SqlParameter("SerialNumber", typeof(string));
var useridParameter = userid.HasValue ?
new SqlParameter("Userid", userid) :
new SqlParameter("Userid", typeof(int));
var iPParameter = iP != null ?
new SqlParameter("IP", iP) :
new SqlParameter("IP", typeof(string));
var result = new SqlParameter("@return", SqlDbType.Int);
result.Direction = ParameterDirection.ReturnValue;
Database.ExecuteSqlCommand("web_serialUse", serialNumberParameter, useridParameter, iPParameter);
return Convert.ToInt32(result.Value);
//var serialNumberParameter = serialNumber != null ?
// new ObjectParameter("SerialNumber", serialNumber) :
// new ObjectParameter("SerialNumber", typeof(string));
//var useridParameter = userid.HasValue ?
// new ObjectParameter("Userid", userid) :
// new ObjectParameter("Userid", typeof(int));
//var iPParameter = iP != null ?
// new ObjectParameter("IP", iP) :
// new ObjectParameter("IP", typeof(string));
//return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction("web_serialUse", serialNumberParameter, useridParameter, iPParameter);
}
}
}