EFCore—context在其他程序集时如何进行数据迁移

 场景

 解决方案:

 代码示例:


场景

一般来说,如果efcore进行数据迁移的步骤如下

  1. 安装nuget包
  2. 创建实体类
  3. 创建config
  4. 创建dbcontext

然后执行如下命令就可以成功迁移了

  1. Add-Migration Init

  2. Update-Database

一执行,报错

Unable to create an object of type 'MyDbContext'. For the different patterns supported at design time, see https://go.microsoft.com/fwlink/?linkid=851728

 原因是这样的。因为我当前解决方案有多个程序集,然后我的context是抽出来单独放到一个类库(EFCore)中,并不在webapi下。因此报错

EFCore—context在其他程序集时如何进行数据迁移_第1张图片

 解决方案:

在网上找了很多资料都没解决,最后自己误打误撞解决掉了

1.首先,启动项目,设置为WebApi

2.然后 程序包管理器控制台的默认项目,设置为context所在程序集

EFCore—context在其他程序集时如何进行数据迁移_第2张图片

 3.检查Webapi是否引用上面的程序集

EFCore—context在其他程序集时如何进行数据迁移_第3张图片

4.webapi也需要安装nuget包

 做完这些,再试一次,成功! 

EFCore—context在其他程序集时如何进行数据迁移_第4张图片

 代码示例:

dbcontext

public class MyDbContext : DbContext
{
    public DbSet Users { get; set; }

    //注入方式配置
    public MyDbContext(DbContextOptions options) : base(options)
    {
    }
}

config

using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using Model.Entitys;

namespace EFCore;

 class UsersConfig:IEntityTypeConfiguration
{
    public void Configure(EntityTypeBuilder builder)
    {
        builder.ToTable("Users");
    }
}

 实体类user

using System.ComponentModel.DataAnnotations;
using Model.Common;

namespace Model.Entitys;

/// 
/// 用户
/// 
public class Users : IEntity
{

    public long Id { get; set; }

    public string Name { get; set; }

    public string Password { get; set; }

}

在program中注入依赖

builder.Services.AddDbContext(p =>
{
    p.UseSqlServer(builder.Configuration.GetConnectionString("SQL"));
});

EFCore—context在其他程序集时如何进行数据迁移_第5张图片

 然后按上面提到的步骤操作,成功

你可能感兴趣的:(数据库,.netcore,orm)