为什么我在 MVC4 中收到这个"Invalid object name 'dbo.*'"错误?



我得到这个错误:

对象名称"dbo.ImageMetas"无效。

在线:

return View(db.Images.ToList());

我的数据库上下文如下所示:

public class GalleryContext : DbContext
{
    public GalleryContext()
        : base("DefaultConnection")
    {
    }
    public DbSet<ImageMeta> Images { get; set; }
    public DbSet<ImageFile> ImageFiles { get; set; }
}

我的型号:

public class ImageMeta
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }
    public UserProfile User { get; set; }
    public string Name { get; set; }
    public virtual ICollection<ImageFile> Files { get; set; } 
}

这是一个全新的MVC4项目。我先编写模型,然后自动生成控制器。

我检查了数据库,实际上表不见了。

不过,我的印象是它会自动为我创建表格;正如本教程所建议的那样。

那它为什么不这么做呢?


好吧,如果我添加一个以上下文命名的连接字符串(并删除基构造函数),它现在就可以工作了。为什么我不能使用DefaultConnection?

<add name="GalleryContext"
   connectionString="Data Source=(LocalDB)v11.0;AttachDbFilename=|DataDirectory|gallery.mdf;Integrated Security=True"
   providerName="System.Data.SqlClient"
/>

尝试将不存在的数据库放入连接字符串中。如果默认情况下数据库不存在,EF Code First将创建数据库(当然,如果提供的凭据有权创建数据库),但它不会更改现有数据库(因为它可能会影响您的现有数据)。

对现有数据库的更改意味着使用代码优先迁移来完成。

编辑:

或者,如果您根本不关心数据,您可以设置数据库初始化器(即在global.asax应用程序启动中),每次更改模型时都会删除并重新创建数据库:

DbDatabase.SetInitializer<MyDBContext>(new DropCreateDatabaseIfModelChanges<MyDBContext>());

有关更多详细信息,请参阅DropCreateDatabaseIfModelChanges类。

我遇到了这个问题,并找到了一个解决方案,它要求SQL中的用户模式是dbo模式的用户模式,因此表是用dbo创建的。在他们开始的时候,问题解决了。

我推测这是一个需要由MS修复的错误。

我在使用数据库优先方法时也遇到了同样的问题。我的服务/服务的主机web.config中的连接字符串不正确。我纠正了连接字符串,它起作用了。

相关内容

最新更新