在.net核心中添加数据库迁移时,我遇到以下错误
这是错误:
这是Startup
中的代码:
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
services.AddDefaultIdentity<ApplicationUser>().AddEntityFrameworkStores<ApplicationDbContext>();
services.AddControllers();
}
这是ApplicationDbContext
类:
public class ApplicationDbContext : IdentityDbContext
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options)
{ }
public DbSet<ApplicationUser> applicationUsers { get; set; }
}
这是ApplicationUser
:
public class ApplicationUser : IdentityUser
{
[Required]
[Column(TypeName = "nvarchar(150)")]
public string UserFName { get; set; }
[Required]
public string UserLName { get; set; }
}
答案 0 :(得分:18)
我发现导致此错误的原因可能是您的代码中有很多东西。至少对我而言,最好的方法是在命令中添加详细信息。
这样您就可以了解问题所在了。 verbose
将显示执行的所有步骤。
在Visual Studio中使用:
add-migration Added_something -verbose
对于CLI使用:
dotnet ef migrations add Added_something --verbose
答案 1 :(得分:7)
如果选择了多个启动项目,也会发生此错误。我将Web项目设置为启动项目,这为我解决了这个问题。
答案 2 :(得分:2)
我的问题通过安装SELECT department_name, max(city) city, COUNT(employees.department_id) no_of_employees
FROM departments
JOIN employees on (departments.department_id=employees.department_id)
JOIN locations USING (location_id)
GROUP BY department_name;
nuget软件包解决了。
实体框架核心工具需要此软件包。确保您的启动项目正确无误,然后安装该软件包。
然后在项目中 Build-> Clean Solution ,然后尝试再次运行命令。
添加迁移命令cli:
Microsoft.EntityFrameworkCore.Design
更新数据库命令cli:
dotnet ef migrations add InitDatabase --project YourDataProjectName -s YourWebProjectName -c YourDbContextName --verbose
答案 3 :(得分:2)
我发现我不见了:
Microsoft.EntityFrameworkCore.Tool
Microsoft.EntityFrameworkCore.Design
我有多个启动项目(不同的 API)。 我在 PM 控制台中处于不同的级别。 然后我了解到我必须关闭 SQL 管理才能运行 PM 控制台命令。
答案 4 :(得分:1)
如果从.net核心应用程序的Program.cs中删除static IHostBuilder CreateHostBuilder(string[] args)
方法,也会发生此错误。 (这是我的情况)
答案 5 :(得分:1)
我尝试了许多上述答案,但没有一个对我有用。我的问题是我们有多个启动项目,所以这是第一步。只需设置一个启动项目,因此我将我们的 Data
项目设置为启动项目。仍然得到错误。然后它击中了我(感谢@AFetter 的 answer)Data
项目中没有连接字符串。所以我将我的启动项目设置为一个 appSettings.json
文件,该文件与数据库有连接,然后确保包管理器控制台的默认项目设置为 Data
项目并重新运行命令以创建迁移并且成功了!
答案 6 :(得分:1)
似乎您是您的继承人,这是错误的。
public ApplicationDbContext : IdentityDbContext
应该是
public ApplicationDbContext : IdentityDbContext<ApplicationUser>
或
public ApplicationDbContext : IdentityDbContext<ApplicationUser, ApplicationRole>
如果您还扩展角色类。
当您要使用扩展的用户类(而不是IdentityUser
)创建上下文时
答案 7 :(得分:0)
在从azure管道任务运行dot net ef migrations脚本命令时,我遇到了同样的问题。我确实添加了“ -project”参数。但是仍然失败。 添加“ -startup-project”参数对我有用。 我想,即使我们在project中指定了启动类,对于ef工具来说,我们也必须明确提及它们。
答案 8 :(得分:0)
就我而言,我使用的是自定义 IdentityErrorDescriber
:
services.AddIdentity<AppIdentityUser, AppIdentityRole>()
.AddErrorDescriber<MyIdentityErrorDescriber>() // comment this !
.AddEntityFrameworkStores<MyDbContext>()
.AddDefaultTokenProviders();
在我的 MyIdentityErrorDescriber
中,我使用资源来翻译错误。
当我注释掉 .AddErrorDescriber<MyIdentityErrorDescriber>()
行时,迁移工作没有任何错误。我认为问题在于 IdentityErrorDescriber
或资源。
答案 9 :(得分:0)
彻底检查您的 appsettings 文件并确保其格式正确。寻找丢失的字符或不需要的字符
答案 10 :(得分:0)
得到同样的错误...
<块引用>我是这样实现的:
创建了一个新的 ASP.NET Core Web 应用
(模型-视图-控制器)
目标框架是.NET Core 3.1
(LTS)
身份验证类型:个人帐户
一旦项目创建...我希望能够修改注册/登录过程。(但这些页面是 Razor 类库的一部分)
因此,要获取项目中的页面:我右键单击项目 Add->New Scaffolded Item...
并选择了Identity
...
接下来我需要Add-Migration InitIdentity
...这就是错误/麻烦开始的地方。
我尝试阅读并解决其他一些答案,但没有成功。
我通过以下方式找到了解决方案:
创建项目(如上)
但这次我决定不使用脚手架身份。(还)
我在 application.config
中放置了一个连接字符串并运行了该项目。
我在添加迁移之前这样做了。
我进去注册...出现一个屏幕,说迁移尚未运行,并且有一个按钮可以运行迁移。我按下它并进行了刷新,一切都很好。
在这一点上,我回到项目并做了一个 Add->Scafolded Item...
,现在没有错误,我有 Auth 屏幕要修改。
答案 11 :(得分:0)
就我而言,我在 appsettings.json 中缺少一个显示为警告而不是错误的属性
此错误消息有时与数据库上下文模型没有直接关系。检查 Startup 类中的其他错误,例如 appsettings.json/appsettings.Development.json 中缺少属性/凭据
使用 --verbose 选项运行迁移以查看所有错误和警告
dotnet ef migrations add YourMigrationName --verbose
答案 12 :(得分:0)
就我而言,这是因为我将数据类型和迁移存储在单独的“数据”项目中,并且不小心将其设置为启动项目而不是我的实际启动项目。
答案 13 :(得分:0)
今天我在运行dotnet ef migrations add <MigrationName>
我有三个项目,MainApp(Web),带有DBContext的C#项目和用于模型的C#项目。
我能够从CLI解析它。
dotnet ef migrations add AddCategoryTableToDb -s MainApp -p ProjectHavingDbContext
答案 14 :(得分:0)
我有同样的错误,只是修改程序类。 Net Core 3.0
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
收件人
public static void Main(string[] args)
{
BuildWebHost(args).Run();
}
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.Build();
答案 15 :(得分:0)
这个错误发生在我身上,但同时我也遇到了An error occurred while accessing the Microsoft.Extensions.Hosting services. Continuing without the application service provider. Error: Could not parse the JSON file.
修复我的appsettings.json
文件可以解决此问题。
答案 16 :(得分:0)
当我在Startup.cs中忘记执行此操作时遇到了此错误,希望它对某人有帮助:)
services.AddTransient<IExcelMasterRepository, ExcelMasterRepository>();
答案 17 :(得分:0)
我遇到了同样的错误...。只是代码在几分钟前运行良好。
我正在用Fluent API
我有三个项目:WebApp,DataAccess库和模型库。
尝试了几次失败的尝试以解决迁移问题之后,我最终做了Build->Clean Solution
并在WebApp上进行了构建。
一切都恢复正常了……我无法重现错误。
答案 18 :(得分:0)
尽管OP似乎面临该问题,这似乎是由于AspNet Identity提供的基类的使用不正确,但通常在设计时无法创建ApplicationDbContext实例的情况下,我们会遇到此错误。有两种解决方案。其中之一是在StartUp类的ConfigureServices方法中指定ApplicationDbContext提供程序:
TreeNode groupnode = EmojisTreeView.Nodes.Add("Group Name");
EmojiNode emojiNode = new EmojiNode(subgroupEmojiName, unicodeEndStr, emojiConvertResultStr);
int groupsubemojinode = groupsubnode.Nodes.Add(emojiNode);
foreach (var node in EmojisTreeView.Nodes.OfType<EmojiNode>())
{
// count is 0
}
public class EmojiNode : TreeNode
{
public string emojiName;
public string emojiValue;
public string emojiConvertedResultStr;
public EmojiNode(string emojiName, string emojiValue, string emojiConvertedResultStr)
{
this.emojiName = emojiName;
this.emojiValue = emojiValue;
this.emojiConvertedResultStr = emojiConvertedResultStr;
this.Text = this.emojiConvertedResultStr + " " + this.emojiName;
}
public EmojiNode(string emojiName)
{
this.emojiName = emojiName;
this.Text = this.emojiName;
}
public string getEmojiName()
{
return this.emojiName;
}
public string getEmojiValue()
{
return this.emojiValue;
}
public string getEmojiConvertedResultStr()
{
return this.emojiConvertedResultStr;
}
}
有关其他解决方案,请查看以下链接:https://docs.microsoft.com/en-gb/ef/core/miscellaneous/configuring-dbcontext#onconfiguring