1.首先下载vs2015的Asp.Net Core(RC2)的插件工具(https://www.microsoft.com/net/core#windows)
2.创建一个asp.net Core的项目,这里我创建一个最简单的项目,就是一个console,在这个基础上我准备一步一步搭建一个Asp.Net Core的项目

3.添加相关的依赖(mvc的依赖和EF的依赖)在projecr.json中:

  1. {
  2. "dependencies": {
  3. "Microsoft.NETCore.App": {
  4. "version": "1.0.0-rc2-3002702",
  5. "type": "platform"
  6. },
  7. "Microsoft.AspNetCore.Server.IISIntegration": "1.0.0-rc2-final",
  8. "Microsoft.AspNetCore.Server.Kestrel": "1.0.0-rc2-final",
  9. "Microsoft.AspNetCore.StaticFiles": "1.0.0-rc2-final",
  10. "Microsoft.AspNetCore.Mvc": "1.0.0-rc2-final",
  11. "Microsoft.AspNetCore.Razor.Tools": {
  12. "version": "1.0.0-preview1-final",
  13. "type": "build"
  14. },
  15. "Npgsql.EntityFrameworkCore.PostgreSQL": "1.0.0-rc2-release1",
  16. "Microsoft.EntityFrameworkCore.Tools": {
  17. "version": "1.0.0-preview1-final",
  18. "type": "build"
  19. },
  20. "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0-rc2-final",
  21. "Microsoft.Extensions.Configuration.Json": "1.0.0-rc2-final",
  22. "Microsoft.Extensions.Logging": "1.0.0-rc2-final",
  23. "Microsoft.Extensions.Logging.Console": "1.0.0-rc2-final",
  24. "Microsoft.Extensions.Logging.Debug": "1.0.0-rc2-final"
  25. },
  26.  
  27. "tools": {
  28. "Microsoft.AspNetCore.Razor.Tools": {
  29. "version": "1.0.0-preview1-final",
  30. "imports": "portable-net45+win8+dnxcore50"
  31. },
  32. "Microsoft.AspNetCore.Server.IISIntegration.Tools": {
  33. "version": "1.0.0-preview1-final",
  34. "imports": "portable-net45+win8+dnxcore50"
  35. },
  36. "Microsoft.EntityFrameworkCore.Tools": {
  37. "version": "1.0.0-preview1-final",
  38. "imports": [
  39. "portable-net45+win8+dnxcore50",
  40. "portable-net45+win8"
  41. ]
  42. }
  43. },
  44.  
  45. "frameworks": {
  46. "netcoreapp1.0": {
  47. "imports": [
  48. "dotnet5.6",
  49. "dnxcore50",
  50. "portable-net45+win8"
  51. ]
  52. }
  53. },
  54.  
  55. "buildOptions": {
  56. "emitEntryPoint": true,
  57. "preserveCompilationContext": true
  58. },
  59.  
  60. "runtimeOptions": {
  61. "gcServer": true
  62. },
  63.  
  64. "publishOptions": {
  65. "include": [
  66. "wwwroot",
  67. "web.config"
  68. ]
  69. },
  70.  
  71. "scripts": {
  72. "postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ]
  73. }
  74. }

4。在Startup.cs 文件中做如下修改:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Threading.Tasks;
  5. using Microsoft.AspNetCore.Builder;
  6. using Microsoft.AspNetCore.Hosting;
  7. using Microsoft.AspNetCore.Http;
  8. using Microsoft.Extensions.DependencyInjection;
  9. using Microsoft.Extensions.Configuration;
  10. using Microsoft.Extensions.Logging;
  11.  
  12. namespace SmBlog
  13. {
  14. public class Startup
  15. {
  16.  
  17. public Startup(IHostingEnvironment env)
  18. {
  19. var builder = new ConfigurationBuilder()
  20. .SetBasePath(env.ContentRootPath)
  21. .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
  22. .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true);
  23.  
  24. if (env.IsDevelopment())
  25. {
  26. }
  27.  
  28. builder.AddEnvironmentVariables();
  29. Configuration = builder.Build();
  30. }
  31.  
  32. public IConfigurationRoot Configuration { get; }
  33.  
  34. public void ConfigureServices(IServiceCollection services)
  35. {
  36. services.AddMvc();
  37. }
  38.  
  39. // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
  40. public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
  41. {
  42.  
  43. loggerFactory.AddConsole(Configuration.GetSection("Logging"));
  44. loggerFactory.AddDebug();
  45.  
  46. app.UseStaticFiles();
  47.  
  48. app.UseMvc(routes =>
  49. {
  50. routes.MapRoute(
  51. name: "default",
  52. template: "{controller=Home}/{action=Index}/{id?}");
  53. }
  54. );
  55.  
  56. }
  57. }
  58. }

现在并没有添加Ef的服务。

5.新建一个appsettings.json 文件用于项目相关配置,在Startup.cs中的log的配置,以及后来的EF数据库的配置都在这个文件中。

  1. {
  2. "ConnectionStrings": {
  3. "PostgreSql": "User ID=postgres;Password=123456;Host=localhost;Port=5432;Database=smbloh"
  4. },
  5. "Logging": {
  6. "IncludeScopes": false,
  7. "LogLevel": {
  8. "Default": "Debug",
  9. "System": "Information",
  10. "Microsoft": "Information"
  11. }
  12. }
  13. }

6.依照MVC5中的项目目录结构创建如Controllers 和Views和Models文件如下图所示,新建一个HomeController 和Index Action和Index的视图,用于测试。

7.用过dotnet的方式运行(dotnet 相当于之前的dnx) 看到这个结果说明mvc6项目搭建完成

8.开始Ef的操作。在Models中新建一个实体Article简单的给他三个字段

  1. public class Article
  2. {
  3. public int Id { set; get; }
  4.  
  5. public string Title { set; get; }
  6.  
  7. public string Description { set; get; }
  8. }

9.在Models中新建一个SMContext(ef上下文对象)代码如下:

  1. public class SMContext : DbContext
  2. {
  3. public SMContext(DbContextOptions option) : base(option)
  4. {
  5.  
  6. }
  7.  
  8. public DbSet<Article> Articles { set; get; }
  9.  
  10. protected override void OnModelCreating(ModelBuilder modelBuilder)
  11. {
  12. base.OnModelCreating(modelBuilder);
  13. }
  14.  
  15. }

10.修改Startup.cs 文件。增加对Ef的支持:代码如下

  1. public void ConfigureServices(IServiceCollection services)
  2. {
  3. services.AddMvc();
  4.  
  5. services.AddDbContext<SMContext>(option => option.UseNpgsql(Configuration.GetConnectionString("PostgreSql")));
  6.  
  7. }

11.为了初始化数据库,在此新建一个SampleData类,在项目启动的时候,调用此类,进行数据库的初始化。代码如下:

  1. namespace SmBlog.Models
  2. {
  3. public class SampleData
  4. {
  5. public async static Task InitDB(IServiceProvider service)
  6. {
  7. var db = service.GetService<SMContext>();
  8.  
  9. if (db.Database != null && db.Database.EnsureCreated())
  10. {
  11.  
  12. Article article = new Article
  13. {
  14. Title = "test",
  15. Description = "SMBlog Test"
  16. };
  17.  
  18. db.Articles.Add(article);
  19. await db.SaveChangesAsync();
  20. }
  21. }
  22. }
  23. }

这个地方比较灵活,我们初始化创建数据库的时候可以插入一条数据,也可以不插入。我在这个地方插入了一条文章的数据。当然系统中有用户,插入管理员是比较适当的操作的。

12.再次修改Startup文件 调用SampleData 在加载项目的时候创建数据库 并初始化。代码如下:

  1. public async void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
  2. {
  3.  
  4. loggerFactory.AddConsole(Configuration.GetSection("Logging"));
  5. loggerFactory.AddDebug();
  6.  
  7. app.UseStaticFiles();
  8.  
  9. app.UseMvc(routes =>
  10. {
  11. routes.MapRoute(
  12. name: "default",
  13. template: "{controller=Home}/{action=Index}/{id?}");
  14. }
  15. );
  16.  
  17. await SampleData.InitDB(app.ApplicationServices);
  18. }

13.再次启动项目,我的数据已经创建成功,并且插入一条数据。如图:

14.数据库迁移 。当我们增加一个User实体,并且修改了Article的实体,现在要进行数据库的迁移,不是简单的把数据库删除重新建立。要保证原有的数据不变,修改数据库结构。

增加的User实体如下:

  1. public class User
  2. {
  3. public int Id { set; get; }
  4.  
  5. public string UserName { set; get; }
  6.  
  7. public string Password { set; get; }
  8. }

修改后的Article实体如下,加了个Label的字段

  1. public class Article
  2. {
  3. public int Id { set; get; }
  4.  
  5. public string Title { set; get; }
  6.  
  7. public string Description { set; get; }
  8.  
  9. public string Label { set; get; }
    }

在SMContext文件中,增加User的DbConetxt;

如下代码:

  1. public DbSet<User> Users { set; get; }

15.在vs的PM命令输入 Add-Migration newBook

成功后会在项目中产生一个Migrations文件夹。里面有个快照文件和一个迁移的文件。在此不扩展了。

在执行命令: Update-Database newBook 发现报错了

问题解决,不用SampleData来初始化数据库,用 Add-Migration init    Update-Database init 来初始化数据库。

注:也可以在cmd控制台输入命令来实现code first

首先打开cmd 切换到项目的project.json 文件所在文件。执行如下命令

  1. dotnet ef migrations add FirstMigration
  2. dotnet ef database update

asp.net core 使用EF7 Code First 创建数据库,同时使用命令创建数据库的更多相关文章

  1. 创建基于ASP.NET core 3.1 的RazorPagesMovie项目(一)-创建和使用默认的模板

    声明:参考于asp.net core 3.1 官网(以后不再说明) 本教程是系列教程中的第一个教程,介绍生成 ASP.NET Core Razor Pages Web 应用的基础知识. 在本系列结束时 ...

  2. 学习ASP.NET Core Razor 编程系列十一——把新字段更新到数据库

    学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...

  3. 在ASP.NET Core中如何支持每个租户数据存储策略的数据库

    在ASP.NET Core中如何支持每个租户数据存储策略的数据库 不定时更新翻译系列,此系列更新毫无时间规律,文笔菜翻译菜求各位看官老爷们轻喷,如觉得我翻译有问题请挪步原博客地址 本博文翻译自: ht ...

  4. ASP.NET Core EFCore 之Code First

    1.在.NET Core项目中使用Nuget引用包 Sql Server 请安装 Microsoft.EntityFrameworkCore.SqlServer 2.添加实体类 [Table(&quo ...

  5. asp.net core for vs code

    1,命令 2,模板 3,更换启动浏览器 4,vscode使用nuget 5,使用ef migration 6,配置.net core的工作目录 7,使用dotnet ef migrations命令 8 ...

  6. ASP.NET Core 中文文档 第二章 指南(2)用 Visual Studio 和 ASP.NET Core MVC 创建首个 Web API

    原文:Building Your First Web API with ASP.NET Core MVC and Visual Studio 作者:Mike Wasson 和 Rick Anderso ...

  7. Docker 为 ASP.NET Core WebApi 应用程序生成 Docker 映像,创建容器并运行

    1.使用VS2017新建ASP.NET Core WebApi项目 选择API启用Docker支持 2.为 ASP.NET Core WebApi 应用程序生成 Docker 映像,并创建容器运行 生 ...

  8. kubernetes高级之创建只读文件系统以及只读asp.net core容器

    系列目录 使用docker创建只读文件系统 容器化部署对应用的运维带来了极大的方便,同时也带来一些新的安全问题需要考虑.比如黑客入侵到容器内,对容器内的系统级别或者应用级别文件进行修改,会造成难以估量 ...

  9. Asp.Net Core 项目实战之权限管理系统(3) 通过EntityFramework Core使用PostgreSQL

    0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...

随机推荐

  1. PXC(Percona XtraDB Cluster)集群的安装与配置

    Percona XtraDB Cluster是针对MySQL用户的高可用性和扩展性解决方案,基于Percona Server .其包括了Write Set REPlication补丁,使用Galera ...

  2. Java基础知识笔记(三:文件与数据流)

    一.输入流与输出流 输入流将数据从文件.标准输入或其他外部输入设备中加载到内存.输出流的作用则刚好相反,即将在内存中的数据保存到文件中,或传输给输出设备.输入流在Java语言中对应于抽象类java.i ...

  3. 敏捷BI比传统BI功能强大是否属实?

    关于大数据的资讯铺天盖地而来,让人眼花缭乱.虽然资讯很精彩,我们也看到了大数据背后的价值,很多企业选择了商业智能BI产品.商业智能在使用上可分为敏捷BI与传统BI,从名字来看敏捷BI要比传统BI显得利 ...

  4. QuickHit项目(输出字符串游戏)

    public class leve { private int leveNo; private int strLength; private int strTimes; private int tim ...

  5. 第19章 集合框架(3)-Map接口

    第19章 集合框架(3)-Map接口 1.Map接口概述 Map是一种映射关系,那么什么是映射关系呢? 映射的数学解释 设A,B是两个非空集合,如果存在一个法则,使得对A中的每一个元素a,按法则f,在 ...

  6. MySQL的基本知识 -- 命令

    1.数据库和表 SHOW DATABASES; 返回可用数据库的一个列表 SHOW TABLES; 返回一个数据库内的表的列表 SHOW COLUMNS FROM tableName; 返回数据表的表 ...

  7. MVC5 + EF6 + Bootstrap3 (16) 客户端验证

    Slark.NET-博客园 http://www.cnblogs.com/slark/p/mvc5-ef6-bs3-get-started-client-side-validation.html 系列 ...

  8. Ubuntu 安裝 嘸蝦米 輸入法

    O S : 14.04.1-Ubuntu 加入fcitx開發團隊的repository: sudo add-apt-repository ppa:fcitx-team/nightly sudo apt ...

  9. Android只能动态注册的广播Action

    只能动态注册的广播(部分): android.intent.action.SCREEN_ON android.intent.action.SCREEN_OFF android.intent.actio ...

  10. sql 关于查询时 出现的 从数据类型 varchar 转换为 numeric 时出错 的解决方法。

    出现这种问题 一般是查询时出现了 varchar 转 numeric 时出了错  或varchar字段运算造成的 解决方法: 让不能转的数不转换就可以了 sql的函数有个isNumeric(参数) 用 ...