【问题标题】:Entity Framework not creating database when using sqlserver express [closed]使用sqlserver express时实体框架不创建数据库[关闭]
【发布时间】:2012-09-10 01:07:14
【问题描述】:

使用 SQL Express 时,Entity Framework 不会创建我的数据库,但如果我使用 SQL Server CE,它可以正常工作。

这几天我一直在尝试解决这个问题,但这可能是我对 ASP.NET 和 MVC 的缺乏经验。

 ConnectionStrings:
<connectionStrings>
    <!--
    <add name="CRM"
         connectionString="data source=|DataDirectory|CRM.sdf"
         providerName="System.Data.SqlServerCe.4.0" />-->

    <add name="CRM"
         connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\CRM.mdf;User Instance=true"
         providerName="System.Data.SqlClient" />

    <add name="ApplicationServices"
         connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true"
         providerName="System.Data.SqlClient" />
  </connectionStrings>

堆栈跟踪:

System.InvalidOperationException was caught
  Message=Unable to complete operation. The supplied SqlConnection does not specify an initial catalog.
  Source=System.Data.Entity
  StackTrace:
       at System.Data.SqlClient.SqlProviderServices.GetDatabaseName(SqlConnection sqlConnection)
       at System.Data.SqlClient.SqlProviderServices.DbCreateDatabase(DbConnection connection, Nullable`1 commandTimeout, StoreItemCollection storeItemCollection)
       at System.Data.Objects.ObjectContext.CreateDatabase()
       at System.Data.Entity.Internal.DatabaseOperations.Create(ObjectContext objectContext)
       at System.Data.Entity.Database.Create()
       at System.Data.Entity.CreateDatabaseIfNotExists`1.InitializeDatabase(TContext context)
       at System.Data.Entity.Internal.InternalContext.<>c__DisplayClass5.<PerformDatabaseInitialization>b__3()
       at System.Data.Entity.Internal.InternalContext.PerformInitializationAction(Action action)
       at System.Data.Entity.Internal.InternalContext.PerformDatabaseInitialization()
       at System.Data.Entity.Internal.LazyInternalContext.<InitializeDatabase>b__4(InternalContext c)
       at System.Data.Entity.Internal.RetryAction`1.PerformAction(TInput input)
       at System.Data.Entity.Internal.LazyInternalContext.InitializeDatabaseAction(Action`1 action)
       at System.Data.Entity.Internal.LazyInternalContext.InitializeDatabase()
       at System.Data.Entity.Internal.InternalContext.Initialize()
       at System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType)
       at System.Data.Entity.Internal.Linq.InternalSet`1.Initialize()
       at System.Data.Entity.Internal.Linq.InternalSet`1.get_InternalContext()
       at System.Data.Entity.Internal.Linq.InternalSet`1.ActOnSet(Action action, EntityState newState, Object entity, String methodName)
       at System.Data.Entity.Internal.Linq.InternalSet`1.Add(Object entity)
       at System.Data.Entity.DbSet`1.Add(TEntity entity)
       at MvcApplication1.Controllers.CustomerController.Create(Customer customer) in C:\Users\hlcole\Documents\RegProjects\MvcApplication1\MvcApplication1\Controllers\CustomerController.cs:line 55
  InnerException: 

【问题讨论】:

    标签: asp.net-mvc entity-framework code-first


    【解决方案1】:

    正如它所说,您没有在连接字符串中提供Initial Catalog=__name__

    SqlCe 是一个本地文件,用于应用程序的目的——不涉及多个数据库。但是,SQLEXPRESS 可以托管和提供多个数据库,因此必须提供 Initial Catalog

    将以下内容添加到您的connectionString

    ;Initial Catalog=__name__
    

    其中__name__ 是您要使用的数据库的名称。

    【讨论】:

    • 哇!那行得通!谢谢!我很惊讶,因为我在包括会员连接字符串在内的任何示例中都没有看到这一点。非常感谢您的帮助!
    • 关于更多信息,尽管您提供了一个 mdf 文件 SQLEXPRESS 仍然需要知道它应该将文件视为哪个数据库(用于此和将来的参考)。
    猜你喜欢
    • 1970-01-01
    • 2011-08-12
    • 2011-09-28
    • 1970-01-01
    • 1970-01-01
    • 2019-12-24
    • 1970-01-01
    • 2014-09-30
    相关资源
    最近更新 更多