Sql server 实体框架不创建表
我真的没有运气与EF的每一次。这次看起来是这样的: 第一次创建上下文时,出现如下错误: 无效的对象名称“dbo.TableName1” 在将数据库初始值设定项设置为CreateDatabaseIfNotExists T之后,它就完成了这项任务 接下来,我创建了一个不同的上下文,它在开发的某个阶段发生了变化。所以这一次我一直得到这个错误: 自创建数据库以来,支持“NewContext”上下文的模型已更改 我找到了一个将数据库初始值设定项设置为null的解决方案,但在此之后,我一直遇到第一个错误: 无效的对象名称“dbo.TableName2” 我还尝试将初始值设定项设置为DropCreateDatabaseIfModelChanges和DropCreateDatabaseAlways,这些设置会引发异常: 无法删除数据库“DatbaseName”,因为它当前正在使用 我想我已经尝试了我在网络上找到的所有东西(有很多这样的主题),但是没有一个能帮到我 删除数据库也无济于事,从本地文件数据库更改为SQL Server 2014 Exspress也无济于事。将引发相同的异常。有什么想法吗 Edit1: 工作环境:Sql server 实体框架不创建表,sql-server,asp.net-mvc,entity-framework,Sql Server,Asp.net Mvc,Entity Framework,我真的没有运气与EF的每一次。这次看起来是这样的: 第一次创建上下文时,出现如下错误: 无效的对象名称“dbo.TableName1” 在将数据库初始值设定项设置为CreateDatabaseIfNotExists T之后,它就完成了这项任务 接下来,我创建了一个不同的上下文,它在开发的某个阶段发生了变化。所以这一次我一直得到这个错误: 自创建数据库以来,支持“NewContext”上下文的模型已更改 我找到了一个将数据库初始值设定项设置为null的解决方案,但在此之后,我一直遇到第一个错误:
public class ProfilesContext : DbContext
{
public ProfilesContext() : base("DefaultConnection")
{
}
public DbSet<Profile> Profiles { get; set; }
public DbSet<PrevilegedContact> PrevilegedContacts { get; set; }
}
public class PlacesContext : DbContext
{
public PlacesContext()
: base("DefaultConnection")
{
}
public DbSet<Place> Places { get; set; }
public DbSet<Price> Prices { get; set; }
public DbSet<Photo> Photos { get; set; }
public DbSet<Comment> Comments { get; set; }
}
公共类概要文件上下文:DbContext
{
公共配置文件上下文():基本(“DefaultConnection”)
{
}
公共数据库集配置文件{get;set;}
公共DbSet PrevilegedContacts{get;set;}
}
失败背景:
public class ProfilesContext : DbContext
{
public ProfilesContext() : base("DefaultConnection")
{
}
public DbSet<Profile> Profiles { get; set; }
public DbSet<PrevilegedContact> PrevilegedContacts { get; set; }
}
public class PlacesContext : DbContext
{
public PlacesContext()
: base("DefaultConnection")
{
}
public DbSet<Place> Places { get; set; }
public DbSet<Price> Prices { get; set; }
public DbSet<Photo> Photos { get; set; }
public DbSet<Comment> Comments { get; set; }
}
公共类位置上下文:DbContext
{
公共场所上下文()
:base(“默认连接”)
{
}
公共数据库集位置{get;set;}
公共数据库集价格{get;set;}
公共数据库集照片{get;set;}
公共DbSet注释{get;set;}
}
对于您正在做的事情,您的初始值设定项似乎有两个选项。有,有
迁移将在模型更改时控制数据库表的更新,并允许您保留数据。您可以将其配置为允许或不允许数据丢失。如果已经有测试数据,那么在开发期间非常有用
DropCreateDatabaseIfModelChanges只需在每次进行模型更改并使用新模式重新创建时删除数据库
您将收到错误消息
无法删除数据库“DatbaseName”,因为它当前正在使用
因为您很可能在服务器资源管理器中浏览了该表,并且与数据库有一个打开的连接。您可以使用服务器资源管理器中的右键单击上下文菜单关闭连接
如果你想要一个关于迁移的视频概述,有一个免费的视频。这是MVC4,但实体框架部分确实涵盖了初始化器。如果您希望MVC5的更新版本包含多个上下文等,它确实存在,但您需要进行Pluralsight免费试用才能访问它 我同意詹姆斯的观点。关于检查服务器资源管理器的好观点。右键单击数据库并选择CloseConnection,或者至少检查是否有一个红色的X表示连接已关闭。下面的链接是关于代码优先迁移基础知识的优秀教程。该链接直接指向教程中的页面,该页面讨论如何更改模型以及如何使EF再次快乐。我更喜欢使用迁移。您将使用PackageManager控制台,1)启用迁移,2)添加迁移,3)更新数据库。如果正在开发中,请尽可能使用LocalDb,并在配置类中使用Seed方法预填充数据库。能否显示初始化器代码、DbContext类?用您请求的代码编辑主题