在.net core 中PetaPoco结合EntityFrameworkCore使用codefirst方法进行开发
在.net core开发过程中,使用最多的就是注入方法。但是在.net core使用PetaPoco时,PetaPoco还不支持进行注入方式进行处理一些问题。
今天对PetaPoco进行了一些扩展,可以很方便的将PetaPoco进行注入操作,使用和EF很相似,但是更加简单
1、对PetaPoco.Compiled进行的一些扩展PetaPoco.Compiled.Extensions库
nuget:https://www.nuget.org/packages/PetaPoco.Compiled.Extensions/ 欢迎使用
github:https://github.com/mzy666888/PetaPoco.Compiled.Extensions 欢迎star
具体扩展内容如下
1.1 创建PetaPocoDBContextOptions类
namespace PetaPoco.Compiled.Extensions
{
using Microsoft.Extensions.Options; public class PetaPocoDBContextOptions : IOptions<PetaPocoDBContextOptions>
{
/// <summary>The default configured TOptions instance</summary>
PetaPocoDBContextOptions IOptions<PetaPocoDBContextOptions>.Value => this; public string ConnectionString { get; set; }
public string ProviderName { get; set; }
} }
1.2 创建接口IPetaPocoDBContext
接口继承IDatabase
public interface IPetaPocoDBContext:IDatabase
{ }
1.3 创建类PetaPocoDBContext
类继承IPetaPocoDBContext
namespace PetaPoco.Compiled.Extensions
{
using Microsoft.Extensions.Options;
using PetaPoco; public abstract class PetaPocoDBContext:Database,IPetaPocoDBContext
{
/// <summary>
/// 构造函数
/// </summary>
/// <param name="optionsAccessor"></param>
protected PetaPocoDBContext(IOptions<PetaPocoDBContextOptions> optionsAccessor)
: base(optionsAccessor.Value.ConnectionString, optionsAccessor.Value.ProviderName)
{ }
}
}
1.4 添加对IServiceCollection的扩展
namespace PetaPoco.Compiled.Extensions
{
using Microsoft.Extensions.DependencyInjection; public static class PetaPocoDBContextServiceCollectionExtensions
{
public static IServiceCollection AddPetaPoco<T>(
this IServiceCollection services,
Action<PetaPocoDBContextOptions> setupAction)
where T : class ,IPetaPocoDBContext
{
if (null == services)
{
throw new ArgumentNullException(nameof(services));
} if (null == setupAction)
{
throw new ArgumentNullException(nameof(setupAction));
} services.AddOptions();
services.Configure(setupAction);
services.AddScoped<IPetaPocoDBContext, T>();
return services;
}
}
}
这样对PetaPoco的扩展已经完成。
2.在ASP.NET Core MVC中使用PetaPoco.Compiled.Extensions
首先使用nuget对PetaPoco.Compiled.Extensions的引用
使用命令:Install-Package PetaPoco.Compiled.Extensions -Version 0.0.1
添加一个继承PetaPocoDBContext的DBContext类
namespace PetaPoco.Compiled.Extensions.MvcTest.DBContexts
{
using Microsoft.Extensions.Options; public class MvcPetaPocoDBContext:PetaPocoDBContext
{
/// <summary>
/// 构造函数
/// </summary>
/// <param name="optionsAccessor"></param>
public MvcPetaPocoDBContext(IOptions<PetaPocoDBContextOptions> optionsAccessor)
: base(optionsAccessor)
{
}
}
}
添加好后,就可以在Startup中进行注入了,如下图所示
需要添加MySQL.Data的nuget引用
在appsettings.json文件中,数据库连接字符串配置如下:
"ConnectionStrings": {
"MySQL": {
"MvcMySQL": "server=127.0.0.1;port=3306;uid=root;pwd=123456;database=WireCloud;",
"provider": "MySql.Data.MySqlClient"
}
}
添加数据库表:Users(后续将使用EFCore进行CodeFirst进行处理)
添加对Users的操作接口和实现
namespace PetaPoco.Compiled.Extensions.MvcTest.Services
{
using PetaPoco.Compiled.Extensions.MvcTest.Models; public interface IUserService
{
IList<User> GetAll();
} public class UserService : IUserService
{
private PetaPocoDBContext _context; public UserService(PetaPocoDBContext context)
{
_context = context;
}
public IList<User> GetAll()
{
return _context.Fetch<User>();
}
}
}
在HomeController中添加一个Action
namespace PetaPoco.Compiled.Extensions.MvcTest.Controllers
{
using PetaPoco.Compiled.Extensions.MvcTest.Services; public class HomeController : Controller
{
private IUserService _userService; public HomeController(IUserService userService)
{
_userService = userService;
}
public IActionResult Index()
{
return View();
} public IActionResult Privacy()
{
return View();
} [ResponseCache(Duration = , Location = ResponseCacheLocation.None, NoStore = true)]
public IActionResult Error()
{
return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
} public IActionResult Users()
{
return View(_userService.GetAll());
}
}
}
View实现
@model System.Collections.Generic.IList<PetaPoco.Compiled.Extensions.MvcTest.Models.User> <div>
@foreach(var user in Model)
{
<div>@user.Uid</div>
<div>@user.UserName</div>
}
</div>
运行并访问:http://localhost:52769/Home/Users
下一步实现EF Core 的CodeFirst功能,然后就能快速使用PetaPoco+EF Core相结合进行快速码代码了
EF Core的代码也可以自己去实现
在.net core 中PetaPoco结合EntityFrameworkCore使用codefirst方法进行开发的更多相关文章
- 在ASP.NET Core中构建路由的5种方法
原文链接 :https://stormpath.com/blog/routing-in-asp-net-core 在ASP.NET Core中构建路由的5种方法 原文链接 :https://storm ...
- C#调用接口注意要点 socket,模拟服务器、客户端通信 在ASP.NET Core中构建路由的5种方法
C#调用接口注意要点 在用C#调用接口的时候,遇到需要通过调用登录接口才能调用其他的接口,因为在其他的接口需要在登录的状态下保存Cookie值才能有权限调用, 所以首先需要通过调用登录接口来保存c ...
- ASP.Net Core中处理异常的几种方法
本文将介绍在ASP.Net Core中处理异常的几种方法 1使用开发人员异常页面(The developer exception page) 2配置HTTP错误代码页 Configuring stat ...
- ASP.NET Core中app.UseDeveloperExceptionPage和app.UseExceptionHandler方法有什么用
在新建一个ASP.NET Core项目后,在项目Startup类的Configure方法中默认会添加两个方法的调用,app.UseDeveloperExceptionPage和app.UseExcep ...
- .NET Core 中读取appsettings.json配置文件的方法
appsettings.json配置文件结构如下: { "WeChatPay": { "WeChatApp_ID": "wx9999998999&qu ...
- 关于vue项目中axios跨域的解决方法(开发环境)
1.在config文件中修改index.js proxyTable: { "/api":{ target: 'https://www.baidu.com/muc/',//你需要跨域 ...
- ASP.NET Core 中文文档 第三章 原理(6)全球化与本地化
原文:Globalization and localization 作者:Rick Anderson.Damien Bowden.Bart Calixto.Nadeem Afana 翻译:谢炀(Kil ...
- Swift中字符串转化为Class的方法
Swift中字符串转化为Class的方法 在开发中有时候会根据字符串进行对应类的转化,这样我们就可以动态根据服务器返回的字段,动态的加载类,比如优酷,微博等APP会在节假日等动态的TabBar.这样可 ...
- .Net Core 中使用PetaPoco ,T4生成模版
话不多说,直接上源码. 1.引用NuGet 2.添加T4 <#@ template debug="true" hostspecific="false" l ...
随机推荐
- 小白的CTF学习之路4——内存
明天要进行二模考试了,沉住气,加油,能过 内存是学C路上必不可少的一环,一定要非常认真的去学 内存的物理结构: ROM:只读内存——早期的手机 RAM:读写(数据断点既消) DRAM:经常更新 SRA ...
- 第47章:MongoDB-用户管理
①用户管理 在MongoDB里面默认情况下只要是进行连接都可以不使用用户名与密码,因为要想让其起作用,则必须具备以下两个条件: ·条件一:服务器启动的时候打开授权认证: ·条件二:需要配置用户名和密码 ...
- 【转】javaUDP套接字通信
Java UDP网络编程 - 最简单示例 转自 http://blog.csdn.net/wintys/article/details/3525643 /** *UDPServer *@autho ...
- hbase单机版安装+phoneix SQL on hbase 单节点安装
hbase 单机安装部署及phoneix 单机安装 Hbase 下载 (需先配置jdk) https://www.apache.org/dyn/closer.lua/hbase/2.0.1/hbase ...
- numpy 与 matplotlib 的应用
numpy 与 matplotlib 的应用 一.库函数介绍 1. numpy库 NumPy(Numeric Python)提供了一个N维的数组类型ndarray,Numpy底层使用C语言编写,内部解 ...
- Node.js创建本地简易服务器
创建简易的本地服务器 安装node.js 在项目下,通过npm init -y创建package.json文件 通过npm install mime --save加载mime插件 创建server.j ...
- latex_引用参考文献格式,引用多篇参考文献
以下内容在TeXstudio中实现: LaTeX 标准选项及其样式命令为: \bibliographystyle{type} 共有以下8种: plain,按字母的顺序排列,比较次序为作者.年度和标题. ...
- Python成绩雷达图
代码 import numpy as np import matplotlib import matplotlib.pyplot as plt matplotlib.rcParams['font.fa ...
- C++ 使用Lambda
基础使用: C++中的Lambda表达式详解 c++11的闭包(lambda.function.bind) C++ lambda作为函数参数,实现通用的查找接口 C++11系列-lambda函数 进阶 ...
- cf Round#273 Div.2
题目链接,点击一下 Round#273 Div.2 ================== problem A Initial Bet ================== 很简单,打了两三场的cf第一 ...