ASP.NET MVC5实现芒果分销后台管理系统(二):Code First快速集成EntityFramework
在上一篇文章中,我们已经搭建了整个芒果后台管理系统整个工程架构,并集成了automapper,日志组件等,接下来我们将使用entity framework完善系统的持久化存储部分。这篇ef的构造,我将以一种快速集成的方式实现,并提供超多的linq公共方法供业务使用。
nuget引入ef
在xiaomo.repository工程里,右键工程使用nuget引入entityframework ,这里我使用最新的6.4版本
在xiaomo.service的web.config里,添加sql server连接字符串(appsetting内)
<add key="constr" value="server=10.60.215.202;database=mango_sys;persist security info=true;user id=sa;password=**" />
创建表
创建表以及entity
对应entity
[table("orders")] public class orderinfoentity { public int id { get; set; } public datetime opttime { get; set; } public string address { get; set; } public string uuid { get; set; } public string acceptuser { get; set; } public string telephonenumber { get; set; } public string productname { get; set; } public int number { get; set; } public double price { get; set; } public double sum { get; set; } public string packcompany { get; set; } public string packnumber { get; set; } public string status { get; set; } public string expressnumber { get; set; } }
ef关键配置
创建数据库交互上下文databasecontext.cs,初始化时指定连接。这里因为我们先用数据库表,所以我们使用database.setinitializer
添加数据交互接口,这里只列出几个关键接口方法 //methods 创建repositorymanager.cs,封装databasecontext,并实现crud 创建repositoryentitybase.cs,作为所有dao层的公共基类,以供继承映射数据库实体。 创建orderdao 这两个文件内容过多,我就不粘贴到这了。 列举几个使用集成好的ef框架交互的例子 1.查询当前用户是否为代理 2.判断用户名密码是否正确 3.分页查询订单 4.创建订单 整个数据库的查询和操作相当简单。这里您可能会问,如果有一些复杂的sql语句,要怎么写,这里我们在repositorymanager.cs里提供执行sql语句的方法,只需要把sql与参数传递进来即可 如果有新的业务接入,那我们只需要在datebasecontext中加入新的dbset,创建对应entity与表,其他不需要任何改动,整个ef的接入是超级便捷的。 以上为大家实现系统集成ef的关键配置代码,由于篇幅较长,部分源码我并未粘贴全,大家如果感兴趣,可以私信小墨公众号,联系,下一节我们将继续芒果系统的快速搭建,ioc集成castle。整个系列我将面向入门级新手,以实战干货角度为大家陆续呈现,之后将为大家呈现以.net core mvc姿势构建系列,希望大家支持。如需源码,请关注小墨公众号私信,并获取更多小墨精彩分享! 感谢阅读! 本文由博客群发一文多发等运营工具平台 openwrite 发布public class datebasecontext : dbcontext
{
static string connectionstring = "";
static datebasecontext()
{
database.setinitializer<datebasecontext>(null);
}
public datebasecontext(string connstr)
: base(connstr)
{
}
public datebasecontext()
: base(getconnectionstring())
{
}
private static string getconnectionstring()
{
if (string.isnullorempty(connectionstring))
{
connectionstring = configurationmanager.appsettings["constr"].tostring();
}
return connectionstring;
}
public virtual dbset<orderinfoentity> records { get; set; }
public virtual dbset<usersentity> user { get; set; }
}
public interface irepository{}
public interface irepository<tentity> : irepository where tentity : class
t query<t>(func<iqueryable<tentity>, t> querymethod);
tentity firstordefault(expression<func<tentity, bool>> predicate);
tentity load<tprimarykey>(tprimarykey id);
bool exist(expression<func<tentity, bool>> predicte);
tentity insert(tentity entity);
tentity update(tentity entity);
public class repositorymanager : idisposable
public class repositoryentitybase<tentity> : irepository<tentity> where tentity : class
public class ordersdao : repositoryentitybase<orderinfoentity>
业务访问持久化逻辑
public bool isagent(string username)
{
using (var repmgr = new repositorymanager())
{
return repmgr.exist<usersentity>(u => u.username == username && u.role == 1);
}
}
public string searchuser(string username,string pwd)
{
using (var repmgr = new repositorymanager())
{
var queryuser = repmgr.firstordefault<usersentity>(u => u.username == username && u.password == pwd);
}
}
public queryresponse query(queryrequest request)
{
using (var repmgr = new repositorymanager())
{
var response = new queryresponse();
var query = repmgr.query<orderinfoentity>();
int count = query.count();
var results = query.orderbydescending(s => s.opttime).skip((request.currentpage - 1) * request.pagesize).take(request.pagesize);
var entities = results.tolist();
response.totalcount = count;
response.result = entities.convertall(mapper.map<orderinfoentity, orderinfo>);
return response;
}
}
public orderinfo createorder(orderinfo order)
{
using (var repmgr = new repositorymanager())
{
var entity = mapper.map<orderinfo, orderinfoentity>(order);
repmgr.insert(entity);
repmgr.commit();
order.id = entity.id;
}
}
public int executesqlcommand(string sql, params object[] args)
{
return context.database.executesqlcommand(sql, args);
}
结语