我今天早上安装了Visual Studio 2015社区版。之后,我创建了一个新的ASP.NET Web应用程序,并在“ASP.NET 5预览模板”部分中选择了“Web应用程序”模板。
项目创建后,我在解决方案(类库)中添加了第二个项目,该项目应该包含我的所有实体(EF Code First),业务对象,实用程序和其他核心内容。
类库使用.NET Framework 4.5.2并引用EntityFramework 6.1.3。我还添加了ASP.NET Identity 2.2.1(包括EntityFramework提供程序)。
在App.config中我有这个连接字符串:
<connectionStrings>
<add name="ApplicationDbContext" connectionString="Server=(localdb)\projectsv12;Database=myDB;Integrated Security=True" providerName="System.Data.SqlClient" />
</connectionStrings>
这是相应的数据库上下文类:
public class ApplicationDbContext : IdentityDbContext<User> {
public ApplicationDbContext() : base("name=ApplicationDbContext") { }
public static ApplicationDbContext Create() {
return new ApplicationDbContext();
}
protected override void OnModelCreating(DbModelBuilder modelBuilder) {
base.OnModelCreating(modelBuilder);
}
public System.Data.Entity.DbSet<Branch> Branches { get; set; }
public System.Data.Entity.DbSet<Dimension> Dimensions { get; set; }
}
正如您所看到的,App.config和DbContext构造函数中的连接字符串的名称相同。我还设置了两个POCO实体并将它们添加到DbContext(分支和维度)。
所有内容都应该准备好“启用 - 迁移”,然后“更新数据库”,因为我已经使用Visual Studio 2013多次完成。
但是,在Visual Studio 2015中,我收到一条错误消息。这是我做的:
以下是我收到的错误消息:
使用“2”参数调用“SetData”的异常:“在程序集中键入'Microsoft.VisualStudio.ProjectSystem.VS.Implementation.Package.Automation.OAProject''Microsoft.VisualStudio.ProjectSystem.VS.Implementation,Version = 14.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'未标记为可序列化。“ 在C:\ Tfs \ Dev \ primaVISTA \ packages \ EntityFramework.6.1.3 \ tools \ EntityFramework.psm1:720 char:5 + $ domain.SetData('startUpProject',$ startUpProject) + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 〜 + CategoryInfo:NotSpecified:(:) [],MethodInvocationException + FullyQualifiedErrorId:SerializationException System.NullReferenceException:未将对象引用设置为对象的实例。 在System.Data.Entity.Migrations.Extensions.ProjectExtensions.GetProjectTypes(Project project,Int32 shellVersion) 在System.Data.Entity.Migrations.Extensions.ProjectExtensions.IsWebProject(项目项目) 在System.Data.Entity.Migrations.MigrationsDomainCommand.GetFacade(String configurationTypeName,Boolean useContextWorkingDirectory) 在System.Data.Entity.Migrations.EnableMigrationsCommand.FindContextToEnable(String contextTypeName) 在System.Data.Entity.Migrations.EnableMigrationsCommand。&lt;&gt; c__DisplayClass2。&lt; .ctor&gt; b__0() 在System.Data.Entity.Migrations.MigrationsDomainCommand.Execute(Action命令) 对象引用未设置为对象的实例。
有人知道我做错了什么吗?我错过了什么吗?或者这是由于VS2015中的错误可能?
我非常感谢任何帮助!谢谢!
正如Sirwan建议的那样,我打开了一个命令提示符,然后一直到我的库项目文件夹。在这里,我执行了add migration命令:
C:\Tfs\Dev\primaVISTA\src\primaVISTA.Core>dnx . ef migration add M1
System.InvalidOperationException:无法从C:\ Tfs \ Dev \ primaVISTA \ src \ primaVISTA.Core解析项目'primaVISTA.Core' 在Microsoft.Framework.Runtime.ApplicationHostContext..ctor(IServiceProvider serviceProvider,String projectDirectory,String packagesDirectory,String configuration,FrameworkName targetFramework,ICache cache,ICacheContextAccessor cacheContextAccessor,INamedCacheDependencyProvider namedCacheDependencyProvider,IAssemblyLoadContextFactory loadContextFactory,Boolean skipLockFileValidation) 在Microsoft.Framework.Runtime.DefaultHost.Initialize(DefaultHostOptions选项,IServiceProvider hostServices) 在Microsoft.Framework.Runtime.DefaultHost..ctor(DefaultHostOptions选项,IServiceProvider hostServices) 在Microsoft.Framework.ApplicationHost.Program.Main(String [] args) ---从抛出异常的先前位置开始的堆栈跟踪结束--- 在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 在Microsoft.Framework.Runtime.Common.EntryPointExecutor.Execute(Assembly assembly,String [] args,IServiceProvider serviceProvider) at dnx.host.Bootstrapper.RunAsync(List`1 args,IRuntimeEnvironment env,FrameworkName targetFramework) at dnx.host.RuntimeBootstrapper.ExecuteAsync(String [] args,FrameworkName targetFramework) at dnx.host.RuntimeBootstrapper.Execute(String [] args,FrameworkName targetFramework)
我不知道这意味着什么...
答案 0 :(得分:3)
Visual Studio 2015中目前不是这种情况,您应该在项目目录(而不是解决方案目录)中键入以下内容:
C0068000
要查看可用于迁移命令的子命令,请键入dnx . ef [options] [command]
:
dnx . ef migration --help
- 添加新迁移
add
- 将迁移应用于数据库
apply
- 列出迁移list
- 从迁移生成SQL脚本script
- 删除上次迁移<强>更新强>: 首先,您必须设置您的环境:
然后运行此命令:
remove