MVC .Net无法让它停止尝试重新创建表

时间:2015-09-14 16:53:12

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

我已启用迁移 - 但是,现在我正在转移到实时服务器,似乎迁移仍在尝试更新数据库,因为我收到错误:

CREATE TABLE permission denied in database 'secn'.

我在我的模型文件夹中的上下文文件中有这个:

namespace lhts2.Models
{
     public class DefaultConnection : DbContext
     {
            public DefaultConnection() : base("name=DefaultConnection")
        {
            Database.SetInitializer<DefaultConnection>(null);
        }
    }
}

...在我的web.config文件中,我的连接字符串是:

  <add name="DefaultConnection" connectionString="Data Source=[servername];
  Initial Catalog=secn; Integrated Security=True;" providerName="System.Data.SqlClient" />

我也删除了Migrations文件夹,并重新发布 - 但我仍然收到上述错误。

我的web.config文件中也有这个:

<configuration>
  <configSections>
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>

<entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>

我是否需要在其他地方设置SetInitializer,而不是在models模块的上下文文件中?

感谢您的任何建议,

标记

2 个答案:

答案 0 :(得分:0)

来自here

  

...应该在上下文的静态构造函数中设置初始值设定项。静态构造函数在任何构造函数之前调用并执行一次。这就是我们想要的。原因是在某些应用程序中,您可能会多次初始化上下文。您不希望执行所有过程来检查数据库是否准备好进行更改。

所以,你应该改变你的类,使其具有一次只被调用一次的静态构造函数。

namespace lhts2.Models
{
     public class DefaultConnection : DbContext
     {
        static DefaultConnection()
        {
            Database.SetInitializer<DefaultConnection>(null);
        }

        public DefaultConnection() : base("name=DefaultConnection")
        {
        }
    }
}

答案 1 :(得分:0)

我有同样的问题。将IIS用户设置为&#34; sysad&#34;级别用户允许应用程序正常工作。然而,这不是解决问题的安全方法。

进一步的研究表明,&#34;迁移&#34; table(名为dbo .__ MigrationHistory)是罪魁祸首。我已经为所有&#34;应用程序&#34;提供了IIS用户访问权限(选择,更新,删除,插入和引用)。表,但不是&#34;迁移&#34;表。因此,当应用程序运行并尝试确定是否需要迁移时,访问会因为缺少该用户的访问权限而失败,并且应用程序认为需要创建数据库和表 - 这个用户显然不应该拥有权限。做。

通过为__MigrationHistory表(选择,更新,删除,插入和引用)提供正常访问权限,IIS用户现在可以确定不需要迁移,因此不会尝试进行迁移。 Example of Permission Settings Here