实体框架不在localdb中创建数据库

时间:2013-09-24 05:50:47

标签: asp.net sql entity-framework asp.net-mvc-4

我是MVC的新手,现在我正在努力研究Galloway J和其他人在专业Asp.Net MVC 4中演示的示例,在这个例子中我必须做以下事情:

  1. 创建3个类:专辑,流派,艺术家
  2. 创建名为MusicStoreDB的DBContext类
  3. 创建一个控制器,称之为商店经理。
  4. 在脚手架选项中我使用MVC控制器进行读/写操作和视图,使用实体框架

    我还设置了一个初始化程序,以便始终在应用程序启动时重新创建数据库

    但是在运行解决方案时没有创建数据库,可能是我尝试过很多建议的问题,甚至重新安装sql server 2008 R2和VS 2012,但它不起作用。

    这是global.asax文件

    Imports System.Web.Optimization
    Imports System.Data.Entity
    
    Public Class MvcApplication
        Inherits System.Web.HttpApplication
    
        Sub Application_Start()
            AreaRegistration.RegisterAllAreas()
            Database.SetInitializer(Of MusicStoreDB)(New DropCreateDatabaseAlways(Of MusicStoreDB)())
            WebApiConfig.Register(GlobalConfiguration.Configuration)
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters)
            RouteConfig.RegisterRoutes(RouteTable.Routes)
            BundleConfig.RegisterBundles(BundleTable.Bundles)
            AuthConfig.RegisterAuth()
        End Sub
    End Class
    

    和MusicStoreDB类

    Imports System.Data.Entity
    
    Public Class MusicStoreDB
        Inherits DbContext
    
        Public Property Albums() As DbSet(Of Album)
            Get
            End Get
            Set(value As DbSet(Of Album))
            End Set
        End Property
    
        Public Property Genres() As DbSet(Of Genre)
            Get
            End Get
            Set(value As DbSet(Of Genre))
            End Set
        End Property
    
        Public Property Artists() As DbSet(Of Artist)
            Get
            End Get
            Set(value As DbSet(Of Artist))
            End Set
        End Property
    End Class
    

2 个答案:

答案 0 :(得分:0)

确保您的DbContext指定正确的连接字符串:

public class MyNewContext : DbContext
{
    public MyNewContext() : base("DefaultConnection")
    {

    }

    public DbSet<Genre> Genres { get; set; }
    public DbSet<Artist> Artists { get; set; }
    public DbSet<Song> Songs { get; set; }
}

默认情况下为DefaultConnection,但如果您要使用新的连接字符串,请确保将您的更改为MusicStoreDB。到目前为止,我已将其保留为默认值,并毫不费力地部署到Azure。

您应该能够在新项目中使用Entity Framework而无需设置任何新的连接字符串。它“只是工作”使用SQL Express。

如果你在SSMS或其他地方连接到(localdb)\v11.0,我愿意打赌你有一个数据库。

如果您仍然遇到问题,请发布您的global.asax和DbContext。

答案 1 :(得分:0)

所以今天我遇到了同样的问题,事实证明我假设EF会自动检查应用程序启动是否存在该数据库;至少可以说我的希望是雄心勃勃的。

只有在调用DB上下文后,EF才会创建数据库。例如,当您第一次运行应用程序时,如果在登录页面上没有实例化数据库上下文,则不会发生任何事情。

对于音乐商店示例,如果您正在关注该书,请导航至(当然使用您自己的端口号)“http://localhost:34295/StoreManager”,如果您一直关注该书,该控制器的操作应该实例化DBContext。

希望这能帮助像我这样有点失落的人!

相关问题