为什么我在MVC4中收到此“无效对象名称'dbo。*'”错误?

时间:2012-09-02 20:57:10

标签: entity-framework asp.net-mvc-4 visual-studio-2012

我收到此错误:

  

无效的对象名称'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项目。我先写了模型,然后自动生成控制器。

inspected the database,实际上桌子丢失了。

我的印象是它会为我自动创建表格;正如this tutorial所暗示的那样。

那为什么不这样做呢?


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

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

3 个答案:

答案 0 :(得分:2)

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

现有数据库的更改意味着使用code first migrations完成。

修改

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

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

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

答案 1 :(得分:2)

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

我认为这是一个需要由MS修复的错误。

答案 2 :(得分:1)

使用数据库第一种方法时,我也遇到了同样的问题。我服务的/服务主机web.config中的连接字符串不正确。我更正了连接字符串,但它确实有效。