我得到这个错误:
对象名称"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中的连接字符串不正确。我纠正了连接字符串,它起作用了。