实体框架代码优先迁移的例外情况
本文关键字:情况 迁移 框架 代码 实体 | 更新日期: 2023-09-27 18:26:45
在使用实体框架4.3的代码优先迁移时,我遇到了几个未处理的异常。
数据库上下文:
public class MyAppContext : DbContext
{
public DbSet<Branch> Branches { get; set; }
public MyAppContext()
{ }
}
实体:
public class Branch : IEntity<Guid>
{
public Guid Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public bool Active { get; set; }
}
数据库初始化器:
public class MyAppInitializer : CreateDatabaseIfNotExists<MyAppContext>
{
protected override void Seed(MyAppContext context)
{
context.Branches.Add(new Branch() { Id = branchId, Name = "Acme", Description = "Acme", Active = true });
context.SaveChanges();
}
}
我使用将实体框架4.3安装到我的DAL项目和MVC项目中
安装程序包EntityFramework
我已经将MVC项目设置为启动项目,并使用数据库上下文和初始化器对DAL项目执行了以下命令:
PM>启用迁移-详细
使用NuGet项目"Ckms.KeyManagement.Managers"。搜索上下文类型时出错(指定-Verbose可查看异常详细信息)。System.Data.Entity.Migrations.Design.ToolingException:无法加载一个或多个请求的类型。检索LoaderExceptions属性以获取详细信息。在System.Data.Entity.Migrations.Design.ToolingFacade.Run(BaseRunnerrunner)System.Data.Entity.Migrations.Design.ToolingFacade.GetContextTypes()
在System.Data.Entity.Migrations.MigrationsCommands.FindContextToEnable()编辑生成的配置类以将上下文指定为为启用迁移。为项目Ckms.KeyManagement.Managers.启用代码优先迁移
DbMigrationsConfiguration子类被添加到DAL项目中。如果我手动添加DbContext的类型并启用自动迁移:
internal sealed class Configuration : DbMigrationsConfiguration<MyAppContext>
{
public Configuration()
{
AutomaticMigrationsEnabled = true;
}
protected override void Seed(MyAppContext context)
{ }
}
这些异常是为添加迁移和更新数据库命令抛出的:
PM>添加迁移测试EFMigrationsColumn-详细
使用NuGet项目"Ckms.KeyManagement.Managers"。正在使用启动项目"。System.Reflection.TargetInvocationException:已引发异常通过调用的目标。--->System.ArgumentException:参数不正确。(HRESULT中的异常:0x80070057(E_INVALIDARG))---内部异常堆栈跟踪结束---位于System.RuntimeType.IInvokeDispMethod(字符串名称,BindingFlagsinvokeAttr,Object target,Object[]args,Boolean[]byrefModifiers,Int32区域性,String[]namedParameters)System.RuntimeType.IInvokeMember(字符串名称,BindingFlagsbindingFlags,Binder Binder,Object target,Object[]providedArgs,ParameterModifier[]修饰符,CultureInfo区域性,String[]namedParams)System.Management.Automation.ComMethod.InvokeMethod(PSMethod方法,Object[]arguments)的目标引发了异常调用。
更新数据库:
PM>更新数据库-详细
使用NuGet项目"Ckms.KeyManagement.Managers"。正在使用启动项目"。System.Reflection.TargetInvocationException:已引发异常通过调用的目标。--->System.ArgumentException:参数不正确。(HRESULT中的异常:0x80070057(E_INVALIDARG))---内部异常堆栈跟踪结束---位于System.RuntimeType.IInvokeDispMethod(字符串名称,BindingFlagsinvokeAttr,Object target,Object[]args,Boolean[]byrefModifiers,Int32区域性,String[]namedParameters)System.RuntimeType.IInvokeMember(字符串名称,BindingFlagsbindingFlags,Binder Binder,Object target,Object[]providedArgs,ParameterModifier[]修饰符,CultureInfo区域性,String[]namedParams)System.Management.Automation.ComMethod.InvokeMethod(PSMethod方法,Object[]arguments)的目标引发了异常调用。
有什么想法吗?错误消息并没有真正的帮助。我尝试过使用和不使用现有数据库的Nuget命令。
如果您使用单独的库进行数据访问,则在运行查询时需要提供其名称:
添加迁移-StartUpProjectName"您的DAL项目"MyNewMigration
更新数据库-StartUpProjectName"您的DAL项目"-详细
add-migration -Name First -ProjectName DbSet.Framework -StartUpProjectName CodeFirstConsole
第一个:迁移的名称
框架:dbContext和其他类所在的项目
CodeFirstConsole:启动项目(可以是您的web、windows或控制台应用程序)
对于System.ArgumentException:参数不正确。(HRESULT出现异常:0x80070057(E_INVALIDARG))添加-projectname和startupprojectname没有帮助。
将PackageManager控制台的"默认项目"下拉菜单设置为指向库(在我的情况下),我希望"迁移文件夹"及其预期内容位于库中,这是从多项目解决方案中运行该功能的唯一方法。
我也遇到了同样的问题。发现如果配置文件有任何问题,就会出现此错误。我在web.config中有重复的标签,删除这些标签解决了我的问题。
我只通过更改连接字符串中使用的名称来解决这个问题。
<add name="abcd" providerName="System.Data.SqlClient" connectionString="Data Source=.'SQLEXPRESS;AttachDbFileName=|DataDirectory|'DatabaseFileName.mdf;Integrated Security=True;User Instance=True;MultipleActiveResultSets=True" />
我在关闭标签后使用connectionStrings
appSettings
并且就在的标签开始之前
system.web
确保在connectionString
中使用的名称未在其他连接中使用。
遇到了同样的问题,通过从web.config中删除<globalization>
解决了这个问题。。配置文件。只需删除一个