在使用代码优先实体框架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命令。
这并不能解决它我害怕。如果将StartUpProjectName参数添加到该命令,则会引发以下错误:System.Reflection.ReflectionTypeLoadException:无法加载一个或多个请求的类型。 – 2012-03-06 15:19:50
你有在dll配置适当的设置。我的意思是配置节,sql连接等。 – Marcin 2012-03-06 15:32:59
就是这样!我不得不将sql连接添加到DAL dll的app.config。请注意,-StartupProjectName参数必须指向MVC/ui项目而不是DAL项目。谢谢你的帮助。 – 2012-03-06 17:01:28