我正在使用AspCore 2实现代码优先的数据库。我有一个类似这样的“ DataContext.cs”:
public class ApplicationUser : IdentityUser
{
public string FirstName { get; set; }
public string MiddelName { get; set; }
public string LastName { get; set; }
public bool IsActive { get; set; }
public DateTime? DateAdded { get; set; }
}
public class DataContext : IdentityDbContext<ApplicationUser>
{
public DataContext(DbContextOptions<DataContext> options) : base(options) {}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
//AspNetUsers -> User
modelBuilder.Entity<ApplicationUser>()
.ToTable("User");
//AspNetRoles -> Role
modelBuilder.Entity<IdentityRole>()
.ToTable("Role");
//AspNetUserRoles -> UserRole
modelBuilder.Entity<IdentityUserRole>()
.ToTable("UserRole");
//AspNetUserClaims -> UserClaim
modelBuilder.Entity<IdentityUserClaim>()
.ToTable("UserClaim");
//AspNetUserLogins -> UserLogin
modelBuilder.Entity<IdentityUserLogin>()
.ToTable("UserLogin");
}
}
这在我的“ startup.cs”中
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<DataContext>(x => x.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseMvc();
}
}
当我尝试运行dotnet迁移时,“ dotnet ef迁移添加了InitialCreate”,我收到此错误:“找到了多个DbContext。指定要使用的DbContext。对PowerShell命令使用'-Context'参数,对' --context'代表dotnet命令。” 您能帮我解决这个问题吗?谢谢!
答案 0 :(得分:2)
dotnet ef migrations add <your_migration_name> -c <your_context_class_name>
[-上下文| -c]
要使用的DbContext类。仅类别名称或完全符合以下条件的类别名称 命名空间。如果忽略此选项,EF Core将查找上下文 类。如果存在多个上下文类,则需要此选项。
来自https://docs.microsoft.com/en-us/ef/core/miscellaneous/cli/dotnet#common-options
答案 1 :(得分:1)
似乎从DbContext类继承了几个类(可能带有一些nuget包)。因此,使用
添加迁移Add-Migration MyMigration --context DataContext
答案 2 :(得分:0)
请遵循this syntax
Add-Migration [-Name] <String> [-OutputDir <String>] [-Context <String>] [-Project <String>] [-StartupProject <String>] [-Environment <String>] [<CommonParameters>]
在您的情况下
add-migration MyMigration -Context DataContext
答案 3 :(得分:0)
当数据库项目中的DbContext超过1个时, 用于从我的项目中的PrsWebAppContext之类的DbContext继承的evrey类
公共类PrsWebAppContext:DbContext
我们可以按照我在下面说的来写:
NameSpace:PrsCarsWebApp.Data ClasName:CarsWebAppContext
PM> add-migration initial -context PrsCarsWebApp.Data.CarsWebAppContext
开始构建... 构建成功。
有关更多信息,请参阅:
答案 4 :(得分:0)
如果您已经创建了迁移,但是仍然给出了数据库更新命令错误,那么此命令将有助于解决该问题
dotnet ef数据库更新-p基础结构-s API --context StoreContext
答案 5 :(得分:0)
首先通过添加迁移解决此问题。因此,添加迁移:
Add-Migration MyMigration -context DataContext
如果您现在无法解决此问题,或者在添加新控制器时仍然遇到问题,请在数据库上下文中添加以下代码部分:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!optionsBuilder.IsConfigured)
{
IConfigurationRoot configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json")
.Build();
var connectionString = configuration.GetConnectionString("AppDBContextConnection");
optionsBuilder.UseSqlServer(connectionString);
}
}
答案 6 :(得分:0)
//错误代码:
services.AddDbContext<DataContext>(x => x.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
//正确的代码
services.AddDbContext<YourContextClassName>(x => x.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
此外,YourContextClassName 应继承 DbContext,但您将其命名为 DbContext。
这个问题很老了,但我的回答很重要,因为我在将项目从 MySQL 迁移到 SQLServer 时遇到了同样的问题。
答案 7 :(得分:0)
update-database -Context YourContext