目录git
Entity Framework (EF) Core 是轻量化、可扩展、开源和跨平台版的经常使用 Entity Framework 数据访问技术。github
EF Core 可用做对象关系映射程序 (O/RM),以便于 .NET 开发人员可以使用 .NET 对象来处理数据库,这样就没必要常常编写大部分数据访问代码了。数据库
EF Core 支持多个数据库引擎,请参阅数据库提供程序了解详细信息。c#
在本教程中,将建立一个 .NET Core 控制台应用,该应用使用 Entity Framework Core 对 Microsoft SQL Server 数据库执行数据访问。cookie
新建控制台项目:app
执行 PowerShell 命令asp.net
dotnet new console -o ConsoleApp
以下图ide
将当前目录更改成应用程序的目录,以下所示:函数
cd ConsoleApp
安装 Microsoft.EntityFrameworkCore.SqlServer 和 Microsoft.EntityFrameworkCore.Tools工具
dotnet add package Microsoft.EntityFrameworkCore.SqlServer dotnet add package Microsoft.EntityFrameworkCore.Tools
运行 dotnet restore
来安装新的程序包。
使用如下内容建立一个新的 Model.cs 文件。
using Microsoft.EntityFrameworkCore; using System.Collections.Generic; namespace ConsoleApp { public class BloggingContext : DbContext { public DbSet<Blog> Blogs { get; set; } public DbSet<Post> Posts { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlServer("Server=你的数据库地址;Database=ConsoleApp;User Id=你的数据库帐号;Password=你的数据库密码;"); } } public class Blog { public int BlogId { get; set; } public string Url { get; set; } public ICollection<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; } } }
在实际应用程序中,应将每一个类放在单独的文件中,并将链接字符串放在配置文件或环境变量中。 为简化本教程,全部内容均放在一个文件中。
有了模型后,便可经过迁移建立数据库。
dotnet ef migrations add InitialCreate
觉得迁移搭建基架,并为模型建立一组初始表。dotnet ef database update
以将新迁移应用到数据库。 在应用迁移以前,此命令可建立数据库。打开 Program.cs 并将内容替换为如下代码:
using System; namespace ConsoleApp { class Program { static void Main(string[] args) { using (var db = new BloggingContext()) { db.Blogs.Add(new Blog { Url = "http://blogs.msdn.com/adonet" }); var count = db.SaveChanges(); Console.WriteLine("{0} records saved to database", count); Console.WriteLine(); Console.WriteLine("All blogs in database:"); foreach (var blog in db.Blogs) { Console.WriteLine(" - {0}", blog.Url); } } } } }
运行 dotnet run
从控制台测试应用。
在本教程中,将使用 Entity Framework Core 构建执行基本数据访问的 ASP.NET Core MVC 应用程序。
单击“肯定”
对于本教程,无需安装提供程序包,由于本教程使用 SQL Server。 SQL Server 提供程序包包含在 Microsoft.AspnetCore.App 元包中。
将此文件的内容替换为如下代码:
using System.Collections.Generic; using Microsoft.EntityFrameworkCore; namespace WebApplication.Models { public class BloggingContext : DbContext { public BloggingContext(DbContextOptions<BloggingContext> options) : base(options) { } public DbSet<Blog> Blogs { get; set; } public DbSet<Post> Posts { get; set; } } public class Blog { public int BlogId { get; set; } public string Url { get; set; } public ICollection<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; } } }
生产应用一般会将每一个类放在单独的文件中。 为简单起见,本教程将这些类放在一个文件中。
若要使 BloggingContext
可用于 MVC 控制器,请在 Startup.cs
中将其注册为服务。
在应用程序启动过程当中,经过依赖关系注入 注册服务(如 BloggingContext),以便可以经过构造函数的参数和属性向使用服务的组件(如 MVC 控制器)自动提供该服务。
在 Startup.cs 中,添加如下 using 语句:
using WebApplication.Models; using Microsoft.EntityFrameworkCore;
将如下 手动高亮
的代码添加到 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; }); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1); var connection = @"Server=你的数据库地址;Database=WebApplication;User Id=你的数据库帐号;Password=你的数据库密码;"; // 手动高亮 services.AddDbContext<BloggingContext> // 手动高亮 (options => options.UseSqlServer(connection)); // 手动高亮 }
生产应用一般会将链接字符串放在配置文件或环境变量中。 为简单起见,本教程在代码中定义它。
如下步骤使用迁移建立数据库。
运行如下命令:
Add-Migration InitialCreate Update-Database
若是收到错误,指出 The term 'add-migration' is not recognized as the name of a cmdlet,请关闭并从新打开 Visual Studio。
Add-Migration 命令为迁移搭建基架,以便为模型建立一组初始表。 Update-Database 命令建立数据库并向其应用新的迁移。
生成 Blog 实体控制器和视图的基架。
单击 添加。