我收到此错误:
无效的对象名称'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"
/>
答案 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中的连接字符串不正确。我更正了连接字符串,但它确实有效。