ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

EntityFramework core用法

2021-04-14 10:06:40  阅读:229  来源: 互联网

标签:core Microsoft void DbContext 用法 EntityFramework EntityFrameworkCore optionsBuil


一、 reverse engineer(database->code)
In Visual Studio, select menu Tools -> NuGet Package Manger -> Package Manger Console and run the following command:
PM>Scaffold-DbContext "Server=.\SQLExpress;Database=SchoolDB;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models
需要安装包Microsoft.EntityFrameworkCore.Tools
Install-Package Microsoft.EntityFrameworkCore.Tools
使用Scaffold-DbContext命令需要项目中安装 Microsoft.EntityFrameworkCore.Design 和 Microsoft.EntityFrameworkCore.SqlServer 包,如果是MySQL的话则安装 Pomelo.EntityFrameworkCore.MySql

二、 Code first migration
1在vs中创建项目
引入包Microsoft.EntityFrameworkCore
根据需要引入数据库的provider包,如sqlserver为Microsoft.EntityFrameworkCore.SqlServer,mysql为Pomelo.EntityFrameworkCore.MySql
,sqlite为Microsoft.EntityFrameworkCore.Sqlite。
2 创建表实体:
public class Book
{
public int BookId { get; set; }
public string Title { get; set; }
}
3 创建数据库的Dbcontext
比如
public class BookContext:DbContext
{
public BookContext()
{
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!optionsBuilder.IsConfigured)
{
optionsBuilder.UseSqlServer("Server=.;Database=bookstest;Trusted_Connection=True;");
}
}
}
指定数据库Dbcontext的数据库类型和连接字符串有三种方法,一种就是上面的,写一个没有参数的构造函数,然后通过 protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
指定数据库的provider和连接串。

如果启动项目使用 ASP.NET Core Web Host或者.NET Core Generic Host,系统工具将会从serviceprovider得到DbContext
public class Program
{
public static void Main(string[] args)
=> CreateHostBuilder(args).Build().Run();

// EF Core uses this method at design time to access the DbContext
public static IHostBuilder CreateHostBuilder(string[] args)
    => Host.CreateDefaultBuilder(args)
        .ConfigureWebHostDefaults(
            webBuilder => webBuilder.UseStartup<Startup>());

}

public class Startup
{
// public void ConfigureServices(IServiceCollection services)
// => services.AddDbContext();
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();

services.AddDbContext<ApplicationDbContext>(
    options => options.UseSqlServer("name=ConnectionStrings:DefaultConnection"));

}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
}

}

public class ApplicationDbContext : DbContext
{
public ApplicationDbContext(DbContextOptions options)
: base(options)
{
}
}
这种方法需要把DbContext注册成为服务。

还有一种方法就是使用设计时工厂
public class BloggingContextFactory : IDesignTimeDbContextFactory
{
public BloggingContext CreateDbContext(string[] args)
{
var optionsBuilder = new DbContextOptionsBuilder();
optionsBuilder.UseSqlite("Data Source=blog.db");

    return new BloggingContext(optionsBuilder.Options);
}

}
设计工厂的优先级最高。

三、生成数据库
将实体类加入dbcontext类
public class BookContext:DbContext
{
public BookContext()
{
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!optionsBuilder.IsConfigured)
{
optionsBuilder.UseSqlServer("Server=.;Database=bookstest;Trusted_Connection=True;");
}
}

    public DbSet<Book> Books { get; set; 

}
在vs中,设定好启动项目,启动项目为Host项目(如果是host设定的)或者含有设计工厂类的项目。
在Package manager console 中,设定默认项目为含有dbcontext 的项目

使用add-migration 和update-database 将表更新到数据库。

标签:core,Microsoft,void,DbContext,用法,EntityFramework,EntityFrameworkCore,optionsBuil
来源: https://www.cnblogs.com/charlesyuan/p/14656496.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有