其实Getting Started当中有着详细的说明,https://docs.efproject.net/en/latest/platforms/aspnetcore/new-db.html。但是有网友问道,就说一下好了。

  1. 新建项目,Asp.net core,选择不适用身份验证。
  2. 添加项目引用。这里还是使用postgreSql。

    在Nuget 控制台中输入命令:

    Install-Package Npgsql.EntityFrameworkCore.PostgreSQL

    Install-Package Microsoft.EntityFrameworkCore.Tools –Pre

    添加这两个依赖

    然后手动在Tools 节点中加上 "Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final",

    这里发现Tools –Pre就可以正常使用nuget安装,昨天直接获取版本安装失败,看来还是nuget同步问题。

  3. 创建Model类 Blogs,Post和DBContext

    using System;

    using System.Collections.Generic;

    using System.Linq;

    using System.Threading.Tasks;

     

    namespace PostgreSqlDemo2.Models

    {

    public
    class
    Blog

    {

    public
    int BlogId { get; set; }

    public
    string Url { get; set; }

     

    public
    List<Post> Posts { get; set; }

    }

    }

     

    using System;

    using System.Collections.Generic;

    using System.Linq;

    using System.Threading.Tasks;

     

    namespace PostgreSqlDemo2.Models

    {

    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; }

    }

    }

     

    using Microsoft.EntityFrameworkCore;

    using System;

    using System.Collections.Generic;

    using System.Linq;

    using System.Threading.Tasks;

     

    namespace PostgreSqlDemo2.Models

    {

    public
    class
    BloggingContext : DbContext

    {

    public BloggingContext(DbContextOptions<BloggingContext> options)

    : base(options)

    { }

     

    public
    DbSet<Blog> Blogs { get; set; }

    public
    DbSet<Post> Posts { get; set; }

    }

     

    }

  4. 在Startup.cs类中注册DBContext

     

public
void ConfigureServices(IServiceCollection services)

{

// Add framework services.

services.AddApplicationInsightsTelemetry(Configuration);

 

services.AddDbContext<BloggingContext>(options =>

options.UseNpgsql(Configuration.GetConnectionString("DefaultConnection")));

 

services.AddMvc();

}

  1. Appsetting.json中增加连接字符串

    "ConnectionStrings": {

    "DefaultConnection": "User ID=test;Password=test;Host=192.168.1.6;Database=testdb;Pooling=true;"

    },

  2. 创建Migration类

    这里要说一下,Migration是ef框架设计的工具,能够用来生成一些框架类。在vs2015中,可以在Nuget控制台中使用Add-Migration,linux或者cmd中,可以使用dotnet ef migration命令,具体请自行学习。

    言归正传,我们开始生成类,在Nuget控制台中输入命令:

    Add-Migration MyFirstMigration

    等待结束,笔者这里会报一个"无法识别的转义序列"的错误,但是不影响使用,笔者已经在apsnet上报了issue。

    然后我们会看到,项目结构中增加了一个文件夹及几个文件如下:

    查看代码:

    using System;

    using System.Collections.Generic;

    using Microsoft.EntityFrameworkCore.Migrations;

     

    namespace PostgreSqlDemo2.Migrations

    {

    public
    partial
    class
    MyFirstMigration : Migration

    {

    protected
    override
    void Up(MigrationBuilder migrationBuilder)

    {

    migrationBuilder.CreateTable(

    name: "Blogs",

    columns: table => new

    {

    BlogId = table.Column<int>(nullable: false)

    .Annotation("Npgsql:ValueGeneratedOnAdd", true),

    Url = table.Column<string>(nullable: true)

    },

    constraints: table =>

    {

    table.PrimaryKey("PK_Blogs", x => x.BlogId);

    });

     

    migrationBuilder.CreateTable(

    name: "Posts",

    columns: table => new

    {

    PostId = table.Column<int>(nullable: false)

    .Annotation("Npgsql:ValueGeneratedOnAdd", true),

    BlogId = table.Column<int>(nullable: false),

    Content = table.Column<string>(nullable: true),

    Title = table.Column<string>(nullable: true)

    },

    constraints: table =>

    {

    table.PrimaryKey("PK_Posts", x => x.PostId);

    table.ForeignKey(

    name: "FK_Posts_Blogs_BlogId",

    column: x => x.BlogId,

    principalTable: "Blogs",

    principalColumn: "BlogId",

    onDelete: ReferentialAction.Cascade);

    });

     

    migrationBuilder.CreateIndex(

    name: "IX_Posts_BlogId",

    table: "Posts",

    column: "BlogId");

    }

     

    protected
    override
    void Down(MigrationBuilder migrationBuilder)

    {

    migrationBuilder.DropTable(

    name: "Posts");

     

    migrationBuilder.DropTable(

    name: "Blogs");

    }

    }

    }

    Design.cs

    using System;

    using Microsoft.EntityFrameworkCore;

    using Microsoft.EntityFrameworkCore.Infrastructure;

    using Microsoft.EntityFrameworkCore.Metadata;

    using Microsoft.EntityFrameworkCore.Migrations;

    using PostgreSqlDemo2.Models;

     

    namespace PostgreSqlDemo2.Migrations

    {

    [DbContext(typeof(BloggingContext))]

    [Migration("20160713011245_MyFirstMigration")]

    partial
    class
    MyFirstMigration

    {

    protected
    override
    void BuildTargetModel(ModelBuilder modelBuilder)

    {

    modelBuilder

    .HasAnnotation("ProductVersion", "1.0.0-rtm-21431");

     

    modelBuilder.Entity("PostgreSqlDemo2.Models.Blog", b =>

    {

    b.Property<int>("BlogId")

    .ValueGeneratedOnAdd();

     

    b.Property<string>("Url");

     

    b.HasKey("BlogId");

     

    b.ToTable("Blogs");

    });

     

    modelBuilder.Entity("PostgreSqlDemo2.Models.Post", b =>

    {

    b.Property<int>("PostId")

    .ValueGeneratedOnAdd();

     

    b.Property<int>("BlogId");

     

    b.Property<string>("Content");

     

    b.Property<string>("Title");

     

    b.HasKey("PostId");

     

    b.HasIndex("BlogId");

     

    b.ToTable("Posts");

    });

     

    modelBuilder.Entity("PostgreSqlDemo2.Models.Post", b =>

    {

    b.HasOne("PostgreSqlDemo2.Models.Blog", "Blog")

    .WithMany("Posts")

    .HasForeignKey("BlogId")

    .OnDelete(DeleteBehavior.Cascade);

    });

    }

    }

    }

     

    using System;

    using Microsoft.EntityFrameworkCore;

    using Microsoft.EntityFrameworkCore.Infrastructure;

    using Microsoft.EntityFrameworkCore.Metadata;

    using Microsoft.EntityFrameworkCore.Migrations;

    using PostgreSqlDemo2.Models;

     

    namespace PostgreSqlDemo2.Migrations

    {

    [DbContext(typeof(BloggingContext))]

    partial
    class
    BloggingContextModelSnapshot : ModelSnapshot

    {

    protected
    override
    void BuildModel(ModelBuilder modelBuilder)

    {

    modelBuilder

    .HasAnnotation("ProductVersion", "1.0.0-rtm-21431");

     

    modelBuilder.Entity("PostgreSqlDemo2.Models.Blog", b =>

    {

    b.Property<int>("BlogId")

    .ValueGeneratedOnAdd();

     

    b.Property<string>("Url");

     

    b.HasKey("BlogId");

     

    b.ToTable("Blogs");

    });

     

    modelBuilder.Entity("PostgreSqlDemo2.Models.Post", b =>

    {

    b.Property<int>("PostId")

    .ValueGeneratedOnAdd();

     

    b.Property<int>("BlogId");

     

    b.Property<string>("Content");

     

    b.Property<string>("Title");

     

    b.HasKey("PostId");

     

    b.HasIndex("BlogId");

     

    b.ToTable("Posts");

    });

     

    modelBuilder.Entity("PostgreSqlDemo2.Models.Post", b =>

    {

    b.HasOne("PostgreSqlDemo2.Models.Blog", "Blog")

    .WithMany("Posts")

    .HasForeignKey("BlogId")

    .OnDelete(DeleteBehavior.Cascade);

    });

    }

    }

    }

     

    上面代码都是自动生成的,生成依据就是你的Models中的实体类文件。

     

  3. 创建数据库

    虽然上面生成了数据库架构的代码,但是还没有更新到数据库中去。需要执行:

    Update-Database

    如果显示Done.

    则表示更新数据库成功。可以看看数据库中已经自动根据model实体创建了对应的数据表。

  4. 剩下的工作就和前文一样了,不在细说。

总结:

    记住几个命令 "Add-Migration MyFirstMigration","Update-Database"。注意执行时要保证代码能够正常编译,并且已经完成数据库的配置。如果数据库结构改了,可以修改Models下对应的实体类,然后删除Migration文件夹下的文件,然后从新执行这两个命令。笔者这里使用PostgreSQL的时候,报错了,提示Blogs表已存在,应该是issue,只能自行更新了。

Asp.net core 通过Models 生成数据库的方法的更多相关文章

  1. ASP.NET Core 设置和初始化数据库 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core 设置和初始化数据库 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 设置和初始化数据库 上一章节中我们已经设置和配置好了 EF ...

  2. Python3:Django根据models生成数据库表时报 __init__() missing 1 required positional argument: 'on_delete'

    Python3:Django根据models生成数据库表时报 __init__() missing 1 required positional argument: 'on_delete' 一.分析 在 ...

  3. asp.net core web api 生成 swagger 文档

    asp.net core web api 生成 swagger 文档 Intro 在前后端分离的开发模式下,文档就显得比较重要,哪个接口要传哪些参数,如果一两个接口还好,口头上直接沟通好就可以了,如果 ...

  4. 【无私分享:ASP.NET CORE 项目实战(第十三章)】Asp.net Core 使用MyCat分布式数据库,实现读写分离

    目录索引 [无私分享:ASP.NET CORE 项目实战]目录索引 简介 MyCat2.0版本很快就发布了,关于MyCat的动态和一些问题,大家可以加一下MyCat的官方QQ群:106088787.我 ...

  5. .NET跨平台:在Linux上基于ASP.NET 5用EF7生成数据库

    Linux用的是Ubuntu,dnx版本是1.0.0-beta6-12120,EF版本是7.0.0-beta5. 以下是用Entity Framework 7生成SQL Server数据库的操作步骤. ...

  6. asp.net core 使用 swagger 生成接口文档

    参考地址:http://www.cnblogs.com/daxnet/p/6181366.html http://www.jianshu.com/p/fa5a9b76f3ed 微软参考文档:https ...

  7. 基于ASP.NET Core Data Protection生成验证token

    ASP.NET Core Data Protection 不仅提供了非对称加密能力,而且提供了灵活的秘钥存储方式以及一致的加解密接口(Protect与Unprotect).Session中用到了它,C ...

  8. linux 环境下部署 Asp.Net Core 项目 访问 oralce 数据库

    1.ASP.NET Core 是一个跨平台的高性能开源框架,可以部署到Linux上,那项目部署在Linux上有哪些好处呢? 1.linux硬件需求小,大部分版本免费,成本低. 2.linux的用户管理 ...

  9. ASP.NET Core - Razor页面之Handlers处理方法

    简介 在前一篇文章中,我们讨论了Razor页面.今天我们来谈谈处理方法(Handlers). 我们知道可以将代码和模型放在 .cshtml 文件里面或与 .cshtml 匹配的 .cshtml.cs ...

随机推荐

  1. springMvc3.0.5搭建全程 (转)

    用了大半年的Spring MVC3.0,用着感觉不错.简单写一个搭建Spring MVC3.0的流程(以Spring3.0.5为列),数据库交互使用spring JDBC Template,附件有项目 ...

  2. [BCB] C++ BUILDER 绘图 随机生成图形

    由于老师要求要实现一个填充算法,而每次填充都需要一个源图形[不规则],用mspaint自己画太麻烦,于是打算自己动手随机生成. 这里用的是 Polygen()函数,但是注意首尾相接,另外,为了保证规则 ...

  3. JavaScript中reduce()方法

    原文  http://aotu.io/notes/2016/04/15/2016-04-14-js-reduce/   JavaScript中reduce()方法不完全指南 reduce() 方法接收 ...

  4. 【转】MAPI over HTTP协议

    这是一篇非常详细和精彩的介绍MAPI over HTTP协议英文博文.原文地址如下: http://blogs.technet.com/b/exchange/archive/2014/05/09/ou ...

  5. Windows下面如何建立多个Django虚拟环境

    Linux 安装请见另一篇博客 http://www.cnblogs.com/zhaoyingjie/p/6180758.html 1.安装 virtualenv 2.安装virtualenvwrap ...

  6. mvc路由,mvc区域

    1.路由在进行匹配时,会默认匹配第一个路由信息 2.路由规则的{control}和{action}时不能改变的 3.路由规则可以中间字符可以随便定义,但是{control}和{action}必须使用一 ...

  7. HTTP head 详解 (转)

    HTTP(HyperTextTransferProtocol)是超文本传输协议的缩写,它用于传送WWW方式的数据,关于HTTP协议的详细内 容请参考RFC2616.HTTP协议采用了请求/响应模型.客 ...

  8. Mac系统终端命令行不执行命令 总出现command not found解决方法

    配置过安卓开发环境,改过bash_profile这个文件,最后不知怎么的只有cd命令能执行,我猜测可能修改bash_profile文件后没有保存 导致的     保存命令是:  source .bas ...

  9. Ajax省市区无刷新单表联动查询

    方法一: 在很多时候都需要用到无刷新级联查询,本文将以省市区的级联查询作为例子.注:此为单表三级联动 环境:Vistual Studio 2015 .MSSQL 1.首先下载AjaxControlTo ...

  10. FastDFS----recovery状态问题排查记录

     FastDFS问题排查记录现象今天有人反馈,客户端部分图标时而不能显示问题定位用jemter将图片地址进行简单测试后,发现偶尔有404 NOT FOUND的情况在服务器上对八台nginx分别进行测试 ...