EF Core 是一個ORM(對象關系映射),它使 .NET 開發人員可以使用 .NET對象操作數據庫,避免了像ADO.NET訪問數據庫的代碼,開發者只需要編寫對象即可。
EF Core 支持多種數據庫引擎:
Microsoft SQL Sever
SQLite
Npgsql
MySQL
......
1.獲取EF Core
通過NuGet獲取要使用的數據庫支持。比如:Microsoft SQL Sever
打開NuGet程序包管理器控制台,輸入:Install-Package Microsoft.EntityFrameworkCore.SqlServer
2.模型
EF Core 是通過一個模型進行數據庫訪問的。模型由實體類和表示與數據庫中的會話組成的,以及允許你查詢和保存數據派生的上下文。
既可以從現有數據庫生成模型,也可以使用EF 遷移來完成從模型生成數據庫,也就是Database First 和 Code First。
簡單的模型:
public partial class TestContext : DbContext { public TestContext() { } public TestContext(DbContextOptions<TestContext> options) : base(options) { } public virtual DbSet<User> User { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { if (!optionsBuilder.IsConfigured) { #warning To protect potentially sensitive information in your connection string, you should move it out of source code. See http://go.microsoft.com/fwlink/?LinkId=723263 for guidance on storing connection strings. optionsBuilder.UseSqlServer("Data Source=.;Initial Catalog=Test;Integrated Security=True"); } } protected override void OnModelCreating(ModelBuilder modelBuilder) {} }
使用模型操作數據庫:
public class HomeController : Controller { private DataContext _context; public HomeController(DataContext context) { _context = context; } public IActionResult Index() { _context.User.Add(new User() { Name="name",Password="123"}); _context.SaveChanges(); //查詢 var users = _context.User.ToList(); return View(); }
3.Code First
Code First 也就是通過EF遷移來完成從模型生成數據庫。
1.創建項目
創建一個ASP.NET Core WEB 應用程序
2.打開NuGet包管理器下載 Microsoft.EntityFrameworkCore.SqlServer 和 Microsoft.EntityFrameworkCore.Tools
3.在Models文件夾創建實體類和上下文類
public class BlogContext:DbContext { public BlogContext(DbContextOptions<BlogContext> options) : base(options) { } public DbSet<Blog> Blog { get; set; } public DbSet<Post> Post { get; set; } }
public class Blog { public int BlogId { get; set; } public string Url { get; set; } public virtual List<Post> Posts { get; set; } }
public class Post { public int PostId { get; set; } public string Title { get; set; } public string Content { get; set; } public int BlogId { get; set; } public Blog Blog { get; set; } }
4.在ConfigureServices方法中添加上下文依賴注入:
public void ConfigureServices(IServiceCollection services) { services.Configure<CookiePolicyOptions>(options => { // This lambda determines whether user consent for non-essential cookies is needed for a given request. options.CheckConsentNeeded = context => true; options.MinimumSameSitePolicy = SameSiteMode.None; }); var connectionString = Configuration.GetConnectionString("DefaultConnection"); services.AddDbContext<BlogContext>(options => options.UseSqlServer(connectionString)); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1); }
5.在appsettings.json中添加鏈接數據庫字符串
{ "ConnectionStrings": { "DefaultConnection": "Data Source=.;Initial Catalog=Blog;Integrated Security=True" }, "Logging": { "LogLevel": { "Default": "Information" } }, "AllowedHosts": "*" }
6.打開NuGet程序包管理控制台,先輸入 Add-Migration FirstMigration,在輸入pdate-Database。遷移成功后,會創建數據庫,以及會在項目中生成一個Migrations文件夾,里面時遷移記錄。
創建成功就可以通過構造函數依賴注入的方式訪問數據庫了。
4.Database First
Database First,也就是通過現有數據庫生成模型
1.創建項目,並安裝Microsoft.EntityFrameworkCore.SqlServer , Microsoft.EntityFrameworkCore.Tools 和 Microsoft.EntityFrameworkCore.SqlServer.Design
2.在NuGet程序包管理器控制台輸入:Scaffold-DbContext "Data Source=.;Initial Catalog=Blog;Integrated Security=True" Microsoft.EntityFrameworkCore.SqlServer 。執行成功會生成相關模型:
3,現在可以使用上下文訪問數據庫了,但是不能通過依賴注入的方式。如果需要,還是在ConfigureServices方法中添加代碼:services.AddDbContext<BlogContext>()。如果要使用appsettings.json中的連接字符串,就需要按照上面ConfigureServices方法中所寫的。