EntirtyFramework框架是一個輕量級的可擴展版本的流行實體框架數據訪問技術.html
其中的.NetCore版本對應EntityFrameworkCoregit
Git源代碼地址:https://github.com/aspnet/EntityFramework/github
官方使用文檔說明:https://docs.microsoft.com/zh-cn/ef/core/indexsql
1、安裝Nuget包數據庫
Install-package Microsoft.EntityFrameworkCore
Install-package Microsoft.EntityFrameworkCore.SqlServer
Micorsoft.EntityFrameworkCore:EF框架的核心包
Micorsoft.EntityFrameworkCore.SqlServer:針對SqlServer數據庫的擴展,使用SqlServer數據庫必須。相似的還有MySql,SqlLite等
Micorsoft.EntityFrameworkCore.Tools
&Micorosft.EntityFrameworkCore.Design:用戶根據現有的數據庫生成模型代碼等 ,更多參考 :https://docs.microsoft.com/zh-cn/ef/efcore-and-ef6/porting/port-edmx
2、使用實例
1.安裝Nuget包以後,手動建立上下文,並 注入sql連接字符串
using Microsoft.EntityFrameworkCore; namespace Core2 { public class TestContext : DbContext { //public TestContext(DbContextOptions<TestContext> options) : base(options) //{ //} protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { //注入Sql連接字符串 optionsBuilder.UseSqlServer(@"Server=.;Database=Test1;Trusted_Connection=True;"); } public DbSet<Numeber1> Numeber1s { get; set; } } }
2.手寫實體類,只要數據庫中 存在對應 的表就能夠了
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; namespace Core2 { [Table("Numeber1")] public class Numeber1 { [Key] public int ID { get; set; } public decimal Num1 { get; set; } } }
3.測試代碼:cors
static void TestOne() { TestContext _context = new TestContext(); int count = _context.Numeber1s.Count(); Console.WriteLine(count); } static void TestTwo() { DateTime start = DateTime.Now; TestContext _context = new TestContext(); for (int i = 0; i < 10000; i++) { _context.Numeber1s.Add(new Numeber1() { Num1 = i }); _context.SaveChanges(); } Console.WriteLine(_context.Numeber1s.Count()); Console.WriteLine("總時間,秒數:" + (DateTime.Now - start).TotalSeconds); }
在調試的狀態下1萬條插入數據執行時間:框架
3、根據數據庫生成模型
1.安裝EntityFrameworkCore.Design,EntityFrameworkCore.Tools,EntityFrameworkCore.SqlServer.Design
注:在EFCore2.0中只須要安裝
EntityFrameworkCore.Tools
若是不須要自動根據數據庫生成代碼,這個幾個類庫能夠不安裝 。
Install-package Microsoft.EntityFrameworkCore.Design
Install-package Microsoft.EntityFrameworkCore.Tools
Install-package Microsoft.EntityFrameworkCore.SqlServer.Design
2.選擇對應的項目,執行生成命名
Scaffold-DbContext "Server=.;database=test1;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models2
3.生成結果以下 :
![](http://static.javashuo.com/static/loading.gif)
4、Asp.Net Core中註冊EF的上下文處理,在Startup文件中
1.註冊服務
//配置EF的服務註冊 services.AddEntityFramework() .AddDbContext<NotifyBirdContext>(options => { options.UseSqlServer(Configuration.GetConnectionString("SqlServer"), //讀取配置文件中的連接字符串 b => b.UseRowNumberForPaging()); //配置分頁 使用舊方式 });
![](http://static.javashuo.com/static/loading.gif)
2.修改上下文,重點指定DbContextOptions有外部配置
public NotifyBirdContext(DbContextOptions<NotifyBirdContext> opt) : base(opt) { }
3.在控制器中使用數據庫上下文服務
NotifyBirdContext _Context = null; public ProjectController(NotifyBirdContext context) { _Context = context; } /// <summary> /// 獲取可用項目數量 /// </summary> /// <returns></returns> [HttpGet("getcount")] public int GetCount() { try { return _Context.Project.Count(); } catch (Exception ex) { throw ex; } }
五 、.Net Core中 EF Core上下文配置 2,使用全局變量方式定義連接字符串
1.使用空參數構造器的上下文
/// <summary> /// 全局定義數據鏈接字符串 /// </summary> public static string ConStr { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { //optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;database=NotifyBird;Trusted_Connection=True;"); //配置數據連接 optionsBuilder.UseSqlServer(ConStr,b=>b.UseRowNumberForPaging()); }
2.程序 啓動註冊連接ide
public void ConfigureServices(IServiceCollection services) { // Add framework services. services.AddMvc(); NotifyBirdContext.ConStr = Configuration.GetConnectionString("SqlServer"); }
3.任意位置實例化,上下文使用工具
/// <summary> /// 獲取可用項目數量 /// </summary> /// <returns></returns> [HttpGet("getcount")] public int GetCount() { try { NotifyBirdContext _Context = new NotifyBirdContext(); return _Context.Project.Count(); } catch (Exception ex) { throw ex; } }
更多 :
VS Code搭建.NetCore開發環境(二)
VS Code搭建.NetCore開發環境(一)
Chocolatey 簡介(軟件自動化管理工具)