问题 为Entity Framework迁移设置StartUp Project参数


每次我需要添加迁移或更新数据库时使用EF 4.3.1迁移时,我必须使用StartUpProject参数。我可以将它设置在某个地方,所以我不必继续这样做吗?我不想将我的数据项目设置为启动项目。如果有所不同,我的上下文和迁移将在不同的项目中。

不使用StartpProject参数时抛出异常:

update-database -verbose
Using NuGet project 'Data.Deployment'.
Using StartUp project ''.
System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.ArgumentException: The parameter is incorrect. (Exception from HRESULT: 0x80070057 (E_INVALIDARG))
   --- End of inner exception stack trace ---
   at System.RuntimeType.InvokeDispMethod(String name, BindingFlags invokeAttr, Object target, Object[] args, Boolean[] byrefModifiers, Int32 culture, String[] namedParameters)
   at System.RuntimeType.InvokeMember(String name, BindingFlags bindingFlags, Binder binder, Object target, Object[] providedArgs, ParameterModifier[] modifiers, CultureInfo culture, String[] namedParams)
   at System.Management.Automation.ComMethod.InvokeMethod(PSMethod method, Object[] arguments)
Exception has been thrown by the target of an invocation.

12430
2017-08-23 10:14


起源



答案:


至少在Entity Framework 6中,指定启动项目使用 -StartUpProjectName update-database参数:

update-database -StartUpProjectName <String>

你可以使用 get-help 在Package Manager Console中查看命令的可能参数:

get-help update-database -detailed

8
2018-03-11 20:11





我不确定这是否就是您所说的,但您可以将程序包管理器控制台中的默认项目设置为迁移配置所在的项目;这是最右边的下拉列表。
这样我就不必将启动项目作为参数提供。


2
2017-08-27 08:29



我已经这样做了,但如果我没有指定StartupProject参数,它会抛出异常 - newbie_86
真的吗?你可以发布异常的整个输出吗? - Stefan Billiet
在上面的原帖中添加了例外 - newbie_86
嗯,直到现在我才意识到这一点,但显然StartUp项目是你的解决方案启动项目;默认项目用于查找迁移脚手架代码。您可以将迁移代码放在当前的启动项目中吗?它不是很干净,但我能看到的唯一方式...... - Stefan Billiet
不,我想这是可能的,只是想尽可能地避免这种情况。有没有我可以在配置文件或app.config中设置它?是因为它无法找到db的连接字符串?当我传入startupproject参数时,我传入了迁移所在的数据项目名称,而不是实际的解决方案启动项目,如果这有意义的话? - newbie_86


答案:


至少在Entity Framework 6中,指定启动项目使用 -StartUpProjectName update-database参数:

update-database -StartUpProjectName <String>

你可以使用 get-help 在Package Manager Console中查看命令的可能参数:

get-help update-database -detailed

8
2018-03-11 20:11





我不确定这是否就是您所说的,但您可以将程序包管理器控制台中的默认项目设置为迁移配置所在的项目;这是最右边的下拉列表。
这样我就不必将启动项目作为参数提供。


2
2017-08-27 08:29



我已经这样做了,但如果我没有指定StartupProject参数,它会抛出异常 - newbie_86
真的吗?你可以发布异常的整个输出吗? - Stefan Billiet
在上面的原帖中添加了例外 - newbie_86
嗯,直到现在我才意识到这一点,但显然StartUp项目是你的解决方案启动项目;默认项目用于查找迁移脚手架代码。您可以将迁移代码放在当前的启动项目中吗?它不是很干净,但我能看到的唯一方式...... - Stefan Billiet
不,我想这是可能的,只是想尽可能地避免这种情况。有没有我可以在配置文件或app.config中设置它?是因为它无法找到db的连接字符串?当我传入startupproject参数时,我传入了迁移所在的数据项目名称,而不是实际的解决方案启动项目,如果这有意义的话? - newbie_86


一个干净的方法是将测试项目附加到解决方案。

即使您不想编写大量单元测试,它也是数据层命名空间或类似命令的适当启动项目。

这使得启动问题更加清晰,包管理器适用于整个解决方案IIRC - 因此请确保默认项目是包含迁移文件夹的项目。


1
2017-08-30 12:46





使用StartupProject参数: Update-database -StartupProject "PROJECTNAME"


0
2017-07-07 20:52