我每次都对EF没用。这一次看起来像这样:
我第一次创建一个上下文时遇到了错误:
无效的对象名称'dbo.TableName1'
将数据库初始化程序设置为CreateDatabaseIfNotExists后,它就完成了这一操作。
接下来,我创建了一个不同的上下文,在开发的某个阶段进行了更改。所以这一次我不断收到这个错误:
自创建数据库以来,支持'NewContext'上下文的模型已发生变化。
我找到了一个将Database Initializer设置为null的解决方案,但在此之后我不断收到第一个错误:
无效的对象名称'dbo.TableName2'
我还尝试将初始化程序设置为DropCreateDatabaseIfModelChanges和DropCreateDatabaseAlways,这些设置抛出异常:
无法删除数据库“DatbaseName”,因为它当前正在使用
我想我已经尝试过我在网上找到的所有东西(有很多这类主题),但没有人帮助我。
删除数据库没有帮助,也没有从本地文件数据库更改为SQL Server 2014 Exspress。抛出相同的异常。有什么想法吗?
EDIT1: 工作环境:
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; }
}
答案 0 :(得分:1)
对于您正在做的事情,您的初始化程序似乎有2个选项。有Migrations,DropCreateDatabaseIfModelChanges。
迁移将控制模型更改时更新数据库表,并允许您保留数据。您可以将其配置为允许数据丢失。如果你已经有测试数据,那么在开发期间非常有用。
每次进行模型更改时,DropCreateDatabaseIfModelChanges都会删除数据库,并使用新模式重新创建它。您收到错误消息
无法删除数据库&#34; DatbaseName&#34;因为它目前正在使用中
因为您很可能浏览了服务器资源管理器中的表并且与数据库建立了打开的连接。您可以使用服务器资源管理器中的右键单击上下文菜单关闭连接。
如果您想了解有关迁移的视频概述,可以使用免费视频by Scott Allen & Pluralsight。这是MVC4,但实体框架部分确实涵盖了Initalizers。如果您希望MVC5的更新版本包含多个上下文等,它确实存在,但您需要使用Pluralsight免费试用版才能访问它。
答案 1 :(得分:0)
我同意詹姆斯的观点。关于检查Server Explorer的好处。右键单击数据库并选择“关闭连接”或至少检查是否有红色X表示连接已关闭。下面的链接是关于Code First Migrations的基础知识的精彩教程。该链接直接指向教程中的页面,该页面讨论了如何进行模型更改以及如何让EF再次开心! http://www.asp.net/mvc/tutorials/mvc-5/introduction/adding-a-new-field。我更喜欢使用迁移。您将使用程序包管理器控制台和1)启用迁移,2)添加迁移,3)更新数据库。如果在开发中,请尽可能使用LocalDb,并使用Configuration类中的Seed方法预填充数据库。