Sql server 实体框架不创建表

Sql server 实体框架不创建表,sql-server,asp.net-mvc,entity-framework,Sql Server,Asp.net Mvc,Entity Framework,我真的没有运气与EF的每一次。这次看起来是这样的: 第一次创建上下文时,出现如下错误: 无效的对象名称“dbo.TableName1” 在将数据库初始值设定项设置为CreateDatabaseIfNotExists T之后,它就完成了这项任务 接下来,我创建了一个不同的上下文,它在开发的某个阶段发生了变化。所以这一次我一直得到这个错误: 自创建数据库以来,支持“NewContext”上下文的模型已更改 我找到了一个将数据库初始值设定项设置为null的解决方案,但在此之后,我一直遇到第一个错误:

我真的没有运气与EF的每一次。这次看起来是这样的:

第一次创建上下文时,出现如下错误:

无效的对象名称“dbo.TableName1”

在将数据库初始值设定项设置为CreateDatabaseIfNotExists T之后,它就完成了这项任务

接下来,我创建了一个不同的上下文,它在开发的某个阶段发生了变化。所以这一次我一直得到这个错误:

自创建数据库以来,支持“NewContext”上下文的模型已更改

我找到了一个将数据库初始值设定项设置为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; }
}
公共类概要文件上下文: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类?用您请求的代码编辑主题