ASP.NET MVC n层代码优先迁移

时间:2014-09-23 12:43:53

标签: asp.net-mvc-4

我正在为我的Web应用程序使用n层架构,而DbContext类就在这里

public class Db:DbContext
{
    public Db()
        : base("DbConnectionString")
    {
        Database.SetInitializer<Db>(null);
    }
    public class DbInitializer : System.Data.Entity.DropCreateDatabaseIfModelChanges<Db>
    {
        protected override void Seed(Db context)
        {


        }
    }
    public DbSet<User> Users { get; set; }
    public DbSet<Role> Roles { get; set; }
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {


        modelBuilder.Entity<User>().HasMany(r => r.Roles).WithMany(o => o.Users).Map(f =>
        {
            f.MapLeftKey("UserId");
            f.MapRightKey("RoleId");
        });


        base.OnModelCreating(modelBuilder);
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
    }
}

我的app.config文件在这里

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />

  </configSections>
  <connectionStrings>
    <add name="DbConnectionString" connectionString="Server=xx.xxx.xx.xxx;Database=gonulluh_first;User Id=*******;Password=*******;MultipleActiveResultSets=true;" providerName="System.Data.SqlClient" />
  </connectionStrings>
  <entityFramework>
    <contexts>
      <context type="Data.Db, Data">
        <databaseInitializer type="DbInitializer, Data" />
      </context>
    </contexts>
    <defaultConnectionFactory type="Data.DbContextFactory, EntityFramework">      
      <parameters>
        <parameter value="v11.0" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>
</configuration>

当我使用&#34; update-database -verbose&#34;在程序包管理器控制台中将命令迁移到本地数据库。

Using StartUp project 'Web'.
Using NuGet project 'Data'.
Specify the '-Verbose' flag to view the SQL statements being applied to the target database.
Target database is: 'DbConnectionString' (DataSource: (localdb)\v11.0, Provider:         System.Data.SqlClient, Origin: Convention).
No pending explicit migrations.
Running Seed method.

你知道为什么我无法更新远程数据库吗?

2 个答案:

答案 0 :(得分:0)

鉴于你提到了n-tier,我假设你的配置文件在另一个程序集中而不是上下文(Update-Database不会接受)。

如果您需要定位其他服务器,请尝试将-ConnectionString参数指定为Update-Database。 e.g。

Update-Database -ConnectionString "Server=xx.xxx.xx.xxx;Database=gonulluh_first;User Id=*******;Password=*******;MultipleActiveResultSets=true;" -Verbose

它可能会提示您提供商,只需提供System.Data.SqlClient

答案 1 :(得分:0)

感谢您的回答,但这并没有解决我的问题。

我正在使用下面的n层

- 核心 - 数据 --Infra - 服务 --web

所有问题都在我的Web项目中的web.config文件中。我已将其配置如下,问题解决了。

<entityFramework>
  <contexts>
    <context type="Data.Db, Data">
      <databaseInitializer type="Data.DbInitializer, Data" />
    </context>
  </contexts>
  <defaultConnectionFactory type="Data.DbContextFactory, Data">
    <parameters>
      <parameter value="v11.0" />
    </parameters>
  </defaultConnectionFactory>
  <providers>
    <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
  </providers>
</entityFramework>