2012-03-06 79 views
6

在使用代码优先实体框架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>启用的迁移-Verbose

使用NuGet项目'Ckms.KeyManagement.Managers'。 搜索上下文类型时出错(指定-Verbose以查看异常详细信息)。 System.Data.Entity.Migrations.Design.ToolingException:无法加载一个或多个请求的类型。检索LoaderExceptions属性以获取更多信息。在在 System.Data.Entity.Migrations.Design.ToolingFacade.GetContextTypes()
System.Data.Entity.Migrations.Design.ToolingFacade.Run(跑垒员 浇道)在 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) 
    { } 
} 

这些异常抛出的Add-迁移和更新数据库命令:

PM>添加迁移TestEFMigrationsColumn -Verbose

使用NuGet项目 'Ckms.KeyManagement.Managers'。使用启动项目''。 System.Reflection.TargetInvocationException:异常被调用的目标引发 。 ---> System.ArgumentException: 参数不正确。 (Exception from HRESULT:0x80070057 (E_INVALIDARG))---内部异常堆栈跟踪结束---在 System.RuntimeType.InvokeDispMethod(String name,BindingFlags invokeAttr,Object target,Object [] args,Boolean [] byrefModifiers , Int32 culture,String [] namedParameters)at System.RuntimeType。InvokeMember(字符串名称,的BindingFlags 的BindingFlags,粘结剂粘结剂,对象目标,对象[] providedArgs, ParameterModifier []改性剂,CultureInfo的文化,字符串[] namedParams)在 System.Management.Automation.ComMethod.InvokeMethod(PSMethod方法, Object [] arguments) 调用的目标抛出异常。

更新,数据库:

PM>更新,数据库-Verbose

使用的NuGet项目 'Ckms.KeyManagement.Managers'。使用启动项目''。 System.Reflection.TargetInvocationException:异常被调用的目标引发 。 ---> System.ArgumentException: 参数不正确。 (Exception from HRESULT:0x80070057 (E_INVALIDARG))---内部异常堆栈跟踪结束---在 System.RuntimeType.InvokeDispMethod(String name,BindingFlags invokeAttr,Object target,Object [] args,Boolean [] byrefModifiers , 的Int32培养,字符串[] namedParameters)在 System.RuntimeType.InvokeMember(字符串名称,的BindingFlags 的BindingFlags,粘结剂粘结剂,对象目标,对象[] providedArgs, ParameterModifier []改性剂,CultureInfo的文化,字符串[] namedParams )在 System.Management.Automation.ComMethod.InvokeMethod(PSMethod方法, Object []自变量) 调用的目标抛出了异常。

任何想法?错误消息并不真正有用。我已经尝试了使用和不使用现有数据库的Nuget命令。

回答

12

如果您正在使用的数据访问独立的库,您需要提供运行的查询时,它的名字:

添加迁移-StartUpProjectName“你的DAL项目” MyNewMigration

更新,数据库-StartUpProjectName “你的DAL项目” -Verbose

+1

这并不能解决它我害怕。如果将StartUpProjectName参数添加到该命令,则会引发以下错误:System.Reflection.ReflectionTypeLoadException:无法加载一个或多个请求的类型。 – 2012-03-06 15:19:50

+1

你有在dll配置适当的设置。我的意思是配置节,sql连接等。 – Marcin 2012-03-06 15:32:59

+2

就是这样!我不得不将sql连接添加到DAL dll的app.config。请注意,-StartupProjectName参数必须指向MVC/ui项目而不是DAL项目。谢谢你的帮助。 – 2012-03-06 17:01:28

4
add-migration -Name First -ProjectName DbSet.Framework -StartUpProjectName CodeFirstConsole 

第一:迁移

名称

Dbset.Framework:项目中的DbContext和其它类

CodeFirstConsole:启动项目(可能是您的网络,Windows或控制台应用程序)

3

对于System.ArgumentException:参数不正确。 (从HRESULT异常:0x80070057(E_INVALIDARG))添加-projectname和startupprojectname没有帮助。

将PackageManager控制台的“默认项目”下拉菜单设置为指向图书馆(在我的情况下),我希望“Migration folder”及其预期内容是从多项目解决方案中获得此项目的唯一方法。

+0

保罗,你能扩展一下吗?我也无法添加-projectname和startupprojectname并使其正常工作。你在哪里设置“默认项目”(使用VS2013我没有看到)。 – 2015-11-09 15:21:41

1

我也有同样的问题。发现如果配置文件出现任何问题,这个错误就会出现。我在web.config中有重复的标签,并删除这些解决了我的问题。

0

出现同样的问题,通过从web.config中删除<globalization>解决。