在EF 澳门皇冠官网appCore中你不可能这么做,并定义好大家所要使用的数据库上下文

1、难题集聚

率先要保证仓库储存类库中曾经引进以下多少个Nuget包,未有的话请使用包管理器实行设置。不提议直接引入原包:Microsoft.AspNetCore.All,按需引进就可以

Install-Package Microsoft.EntityFrameworkCore.SqlServer

Install-Package Microsoft.EntityFrameworkCore.Tools

a)张开CMD,然后切换成类库所在路线下,实行以下命令。可是你也得以利用程序包管理器调控台(PMC)举行搬迁,可是会某些变化,部分命令见下表:

迁移命令描述 CMD命令 PMC命令
创建迁移:migrationname为迁移名称 dotnet ef migrations add migrationname add-migration migrationname
移除迁移(删除最近的一次迁移) dotnet ef migrations remove remove-migration
应用最新的迁移(使迁移文件应用到数据库) dotnet ef database update update-database
应用指定的迁移 dotnet ef database update migrationname update-database migrationname
查看迁移列表 dotnet ef migrations list  
查看数据库上下文信息 dotnet ef dbcontext info  
dotnet ef

澳门皇冠官网app 1

荒唐提醒:

  未找到与命令“dotnet-ef”相称的可实践文件

消除措施:

  在类型文件Light.Repository.csproj中增加以下节点

<ItemGroup>
    <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.1" />
</ItemGroup>

再也奉行上面的通令,借使出现了EF
Core的标记(二头蓄势待发的野马)表示曾经打响

澳门皇冠官网app 2

 b)、实行以下命令进行搬迁

dotnet ef migrations add InitLightDB

澳门皇冠官网app 3

指鹿为马提醒:

The specified framework version ‘2.0’ could
not be parsed
The specified framework
‘Microsoft.NETCore.App’, version ‘2.0’ was not found.

  • Check application dependencies and
    target a framework version installed at:
    \
  • Alternatively, install the framework
    version ‘2.0’.

缓慢解决格局:

  在项目文件中增加以下节点:

  <PropertyGroup>
    <TargetFramework>netcoreapp2.0</TargetFramework>
    <RuntimeFrameworkVersion>2.0.3</RuntimeFrameworkVersion>
  </PropertyGroup>

c)、重新实行b步骤的通令,报错消息如下:

澳门皇冠官网app 4

谬误提示:

  Unable to create an object of type
‘LightContext’. Add an implementation of
‘IDesignTimeDbContextFactory<LightContext>’ to the project, or see
https://go.microsoft.com/fwlink/?linkid=851728 for additional patterns
supported at design time.

以此主题材料假设是在Web项目,何况陈设了DbContext的链接字符串的话,是不会并发此主题素材的。很醒目是搬迁命令未有找到DbConnectionString导致的,接下去大家根据提醒,完结三个IDesignTimeDbContextFactory<LightContext>试试

焚林而猎措施:

  创制二个与DbContext同一目录下的DesignTimeDbContextFactory文件,然后完成接口中的方法CreateDbContext,并配备ConnectionString

   public class DesignTimeDbContextFactory : IDesignTimeDbContextFactory<LightContext>
    {
        public LightContext CreateDbContext(string[] args)
        {
            var builder = new DbContextOptionsBuilder<LightContext>();
            builder.UseSqlServer("Server=(localdb)\\MSSQLLocalDB;Integrated Security=true;Initial Catalog=Light;");
            return new LightContext(builder.Options);
        }
    }

 再次实践迁移命令,终于成功了。

澳门皇冠官网app 5

中标唤醒:

  Done. To undo this action, use ‘ef
migrations remove’

与此同一时候类库上边会生成Migrations文件夹以及有关的迁徙文件

澳门皇冠官网app 6

接下去看一下如何来拍卖你的DbContext。Miscrosoft告诉大家须求将如下代码做修改。

2、小规模试制迁移命令

a)、使用以下命令应用迁移,生成数据库和表

dotnet ef database update

澳门皇冠官网app 7

经过VS的SQL
Server能源管理器查看生成数据库的协会,在那之中__EFMigrationsHistory为每回迁移的记录表

澳门皇冠官网app 8

b)、因为string类型的字段迁移到数据库之后的数据类型为nvarchar(max)并且是可空类型的,上边大家就动用Fluent
API对ApplicationUser表字段进展配备,一样你也足以接纳品质表明的方法进行安排,因为本人要好不爱好“污染”表实体

    public static void ConfigApplicationUser(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<ApplicationUser>(m =>
            {
                m.Property(t => t.Email)
                        .HasMaxLength(50);

                m.Property(t => t.UserName)
                        .IsRequired()
                        .HasMaxLength(50);

                m.Property(t => t.Password)
                        .IsRequired()
                        .HasMaxLength(20);
            });
        }

接下来一样运用方面包车型客车两条命令重新迁移并革新数据库结构

澳门皇冠官网app 9

入眼数据库表结构已经更新

澳门皇冠官网app 10

 同理加多字段,删除字段都以均等的动员搬迁操作,照旧很有益于的

 

前言

借使我们刚使用EntityFramework
Core作为ORM框架的话,想必都会跨越数据库迁移的片段标题。

开头作者是在ASP.NET
Core的Web项目中开展的,但新兴开采位于此处并非很客观,一些有关数据库的迁移,举例新扩展表,字段,修改字段类型等等,不该和最上层的Web项目所提到,数据的搬迁文件放到这里也感到有个别多余,有一点点乱乱的认为,所以才想着单独出来由特意的门类进行管理会相比好,也相比明晰!

细心指标框架选用的是.NET Core 2.0并非.NET
Standard 2.0。

由于是DB First,还要创设你的测量检验数据库,像上面那样。

4、最后

EF
Core的庞大远不仅那些,还或许有更加多的运用情势等着大家去开掘,去探求。每一天进步级中学一年级丢丢,是件很乐意的业务!

澳门皇冠官网app 11

3、扩展

a)、为了方便演示,其实下边在类库中推行迁移时的数据库连接字符串是写死的,那么最佳的措施是应该去读取Web项目下一度安排好的连日,那样就能够确定保证上下的一致性,不用再去为了EF的迁徙而单独维护二个剩余的数据库连接配置。退换也很简短,即因而Configuration组件读取appsettings.json的ConnectionStrings节点,改变之后是这样子的:

    public class DesignTimeDbContextFactory : IDesignTimeDbContextFactory<LightContext>
    {
        public LightContext CreateDbContext(string[] args)
        {
            Directory.SetCurrentDirectory("..");//设置当前路径为当前解决方案的路径
            string appSettingBasePath = Directory.GetCurrentDirectory() + "/Light.AuthorityApi";//改成你的appsettings.json所在的项目名称
            var configBuilder = new ConfigurationBuilder()
                .SetBasePath(appSettingBasePath)
                .AddJsonFile("appsettings.json")
                .Build();

            var builder = new DbContextOptionsBuilder<LightContext>();
            //builder.UseSqlServer("Server=(localdb)\\MSSQLLocalDB;Integrated Security=true;Initial Catalog=Light;");
            builder.UseSqlServer(configBuilder.GetConnectionString("LightConnection"));
            return new LightContext(builder.Options);
        }
    }

只顾必要格外引入上面那几个Nuget包:

Install-Package Microsoft.Extensions.Configuration.Json

b)、属性评释[Column(Order = 1)]对EF
Core来讲还尚无完毕能够调节数据库生成字段的逐个,可是我们还是能修改迁移文件的实业性质的次第来实现大家想要的效用。上面是自己调动之后再一次生成的表,是或不是看出来和地方的有怎么着分裂,一图胜万语:

澳门皇冠官网app 12

 c)、最终一步,自身入手试试看:创设贰个SeedData迁移文件来增加数据库的开端数据。:)

澳门皇冠官网app 13

0、早先时期谋算

a)、表实体定义,那么些是在.NET
Standard 2.0的类库中存放的。

    /// <summary>
    /// 系统应用的用户实体
    /// </summary>
    public class ApplicationUser : BaseModel
    {
        /// <summary>
        /// 用户名
        /// </summary>
        public string UserName { get; set; }

        /// <summary>
        /// 密码
        /// </summary>
        public string Password { get; set; }

        /// <summary>
        /// 邮件地址
        /// </summary>
        public string Email { get; set; }
    }

b)、新建一个.NET Core
2.0的类库,并定义好大家所要使用的数据库上下文,很轻巧,接下去初阶大家的正文

    /// <summary>
    /// 系统上下文
    /// </summary>
    public class LightContext : DbContext
    {
        public LightContext(DbContextOptions<LightContext> options) : base(options)
        {
        }

        /// <summary>
        /// 系统应用用户
        /// </summary>
        public DbSet<ApplicationUser> ApplicationUser { get; set; }

        /// <summary>
        /// 角色表
        /// </summary>
        public DbSet<Role> Role { get; set; }
    }

那我们New叁个DbContextOption<T>对象呢。你看来重载须求以此参数。

那正是自己的布局。

澳门皇冠官网app 14

早上喝个白牛又喝点茶,一直到凌晨五点钟也不困…腰疼。,有个博士朋友日常和笔者说,你见过清晨三点的夏洛蒂吗?将来睡一觉,醒来去问话他见没见太早晨五点的斯特Russ堡。

澳门皇冠官网app 15

 

 

澳门皇冠官网app 16

你创建线程内独一的上下文的方法恐怕是那般的。

当前国内各大论坛,各位大拿的享受,是根据Microsoft官方文档,在Web层直接行使EF
Core。当然那并从未什么样难点,因为本人也要从文书档案开始享受。独一多的少数正是在Dal层中调用DbContext的方法。你以前用的EF6.x,要是在测量检验代码中你能够从来new出来,在正儿八经的种类开销中,你调节上下文线程内唯一时常,也得以new二个指标。不过!在EF Core中您不能够如此做。

正文版权归天涯论坛和作者刘毛毛共同持有,应接转发,转发和爬虫请表明微博蜗牛原来的作品地址 http://www.cnblogs.com/tdws/p/5874212.html。  

 "tools": {
    "Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final"
  }

中标今后你会开采DAL层中多了贰个Model文件夹,並且将您的数据库表映射出实体类,别的还会有DbContext类。

推行如下增添代码,看起来和EF6.x没什么差异。独一的界别就在于DbContext对象,通过.NET
Core框架自动为大家做构造函数依赖注入IOC。

        //protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        //{
        //    #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(@"Server=2013-20150707DJ\SQL2012EXPRESS;Database=AppDb;Trusted_Connection=True;");
        //}
        public AppDbContext(DbContextOptions<AppDbContext> options)
            : base(options)
        { }

在你的WebAPI或然你的MVC的Startup.cs做如下修改。在其ConfigureServices方法,增添以下代码,connection字符串依然要记得修改:

 在类库和ConsoleApp和WebApi中都从nuget上安装好EF
Core.SqlServer和design。你能够因此nuget可视化管理也足以因而nuget调控台命令。命令如下:

 

在ConsoleApp中调用,增加成功

 protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            #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(@"Server=2013-20150707DJ\SQL2012EXPRESS;Database=AppDb;Trusted_Connection=True;");
        }

第一自个儿新建了.NET Core WebApplication,ConsoleApp和多少个.NET
Core类库,权且就先来三个BLL,DAL三个类库吧。

Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=AppDb;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models

理所必然一向实践这段,你势必会遇见四个接近下边的不当。由于您的起步项目是Web,这段日子你还尚无做项目应该具备的援引,所以它报告你找不到DAL.dll。

到此我们在Web/WebApi中操作dbContext成功。那么一旦你要在Dal层操作,如何做?这些_dbContext未有了依据注入,什么人来给我们对象?本人new一个,然而我们的构造函数摆在这里,不是单独的New就足以操作了。

 1  public class UserDal
 2     {
 3         static string connection = @"Server=2013-20150707DJ\SQL2012EXPRESS;Database=AppDb;Trusted_Connection=True;";
 4         static DbContextOptions<AppDbContext> dbContextOption = new DbContextOptions<AppDbContext>();
 5         static DbContextOptionsBuilder<AppDbContext> dbContextOptionBuilder = new DbContextOptionsBuilder<AppDbContext>(dbContextOption);
 6         AppDbContext _dbContext = new AppDbContext(dbContextOptionBuilder.UseSqlServer(connection).Options);
 7         public int AddUser()
 8         {
 9             _dbContext.Users.Add(new Users { Name = "ws4", Email = "wscoder@outlook.com" });
10             return _dbContext.SaveChanges();
11         }
12     }
  services.AddApplicationInsightsTelemetry(Configuration);
  var connection = @"Server=2013-20150707DJ\SQL2012EXPRESS;Database=AppDb;Trusted_Connection=True;"

澳门皇冠官网app 17

Install-Package Microsoft.EntityFrameworkCore.SqlServer

Install-Package Microsoft.EntityFrameworkCore.SqlServer.Design
 Scaffold-DbContext "Server=2013-20150707DJ\SQL2012EXPRESS;Database=AppDb;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models

杀鸡取蛋方案如下:

澳门皇冠官网app 18

Install-Package Microsoft.EntityFrameworkCore.Tools –Pre

澳门皇冠官网app 19

长久分享,招待点击下方关怀。祝大家中月夕欢快!

比方小编的星星分享,对你有一点滴帮忙,应接点赞,也为您本人的获得点赞。

澳门皇冠官网app 20

澳门皇冠官网app 21

遥想了EF6.x以及在此以前的版本,上边步向本篇分享的正文。葡萄牙共和国(República Portuguesa)语官方文书档案地址https://docs.efproject.net/en/latest/platforms/aspnetcore/existing-db.html#

重载说道:你相似开首化三个实例使用重写DbContext.OnConfiguring方法,或然利用DbContextOptionBulider<T>来创制二个实例。由于大家所需对象为泛型DbContextOption<T>的目的,不过前者的重载方法毫无泛型。也说不定是自己使用有误,假如您有好的得以实现,请留下建议。

澳门皇冠官网app 22

澳门皇冠官网app 23

消除办法当然就是UI引用BLL,BLL引用DAL,重新生成一下后重新实行该命令。还应该有要是提示令你dotnet
restore一下,那您就施行一下。

澳门皇冠官网app 24澳门皇冠官网app 25

在EF6.x中,你的左右文类中是那般的,在构造方法中并未别的参数。

其余你还必要利用如下命令安装tool。并且修改Dal层类库项指标project.json,扩充tools节点。

EF
Core如何保障上下文线程内独一?未有CallContext…,也无法用HttpContext.Current.Item,有人
操作过吗?

澳门皇冠官网app 26

 

在您真的初阶计划new二个的时候,你发掘必要一个DbContextOption<AppDbContext>的靶子。

澳门皇冠官网app 27

修改后是那般的:

澳门皇冠官网app 28

下一步,在你想加多EF的Dal层的nuget调节台,实行以下命令,连接数据库的连锁音信,别忘了修改:

末段小编有个难点,EF Core如今扶助Code First吗? 没看到相关文书档案。