我收到此错误:
对象名称“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项目。我先编写模型,然后自动生成控制器。
I 检查了数据库 https://stackoverflow.com/a/5310619/65387,并且该表确实丢失了。
我的印象是它会自动为我创建表格;作为本教程 http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/accessing-your-models-data-from-a-controller建议。
那么它为什么不这样做呢?
好的,如果我添加一个以我的上下文命名的连接字符串(并删除基本构造函数),它现在就可以工作了。那么为什么我不能使用 DefaultConnection 呢?
<add name="GalleryContext"
connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\gallery.mdf;Integrated Security=True"
providerName="System.Data.SqlClient"
/>
尝试将不存在的数据库放入连接字符串中。如果默认情况下不存在,EF Code-First 将创建数据库(当然,如果提供的凭据有权创建数据库),但它不会更改现有数据库(因为它可能会影响您现有的数据)。
对现有数据库的更改应该使用代码优先迁移 http://msdn.microsoft.com/en-US/data/jj591621.
EDIT:
或者,如果您根本不关心数据,您可以设置数据库初始值设定项(即在 global.asax 应用程序启动中),每次更改模型时都会删除并重新创建数据库:
DbDatabase.SetInitializer<MyDBContext>(new DropCreateDatabaseIfModelChanges<MyDBContext>());
See DropCreateDatabaseIfModelChanges 类 http://msdn.microsoft.com/en-us/library/gg679604%28v=vs.103%29.aspx更多细节。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)