3

我收到此错误:

无效的对象名称“dbo.ImageMetas”。

在这条线上:

返回视图(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"
/>
4

3 回答 3

2

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

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

编辑:

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

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

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

于 2012-09-02T21:24:27.927 回答
2

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

我假设这是一个需要由 MS 修复的错误。

于 2013-08-22T11:46:29.003 回答
1

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

于 2014-08-20T10:59:58.283 回答