0

1つのデータベースで完全に機能しているRazor付きのMVC3を使用するアプリケーションが1つあります。2番目のデータベースにアクセスしようとすると、次のエラーが発生します。

データベース'master'でCREATEDATABASE権限が拒否されました。

プロジェクトに別のDbContextクラスを追加することは、最初に事前に作成されたデータベースを追加するために使用したのと同じプロセスであると想定したため、次のように2番目の接続文字列をweb.configに追加しました。

<connectionStrings>
<add name="DbContext1" connectionString="Data Source=db1.server.com;Initial Catalog=dbName1;User Id=db1;Password=*&#!$;" providerName="System.Data.SqlClient" />
<add name="DbContext2" connectionString="Data Source=db2.server.com;Initial Catalog=dbName2;User Id=db2;Password=*&#!$;" providerName="System.Data.SqlClient" />

次に、2番目のDbContextクラスをアプリケーションに追加しました。

public class DbContext1 : DbContext
{
    public DbSet<Table1> Object1 { get; set; }

    public DbSet<Table2> Object2 { get; set; }

    public DbSet<Table3> Object3 { get; set; }

    public DbSet<Table4> Object4 { get; set; }
}


public class DbContext2 : DbContext
{

    public DbSet<Table1> Object5 { get; set; }
}

2番目のデータベースにアクセスしようとすると、問題が発生します。最初のデータベースはまだ魅力のように機能していますが、何らかの理由で、2番目のデータベースは、接続文字列の最後にある既存のデータベースを読み取るのではなく、新しいデータベースを作成しようとしているようです。どんな助けでも大歓迎です!

4

1 に答える 1

1

クラスのコンストラクターで、コンテキストを明示的に選択してみてください。

public class DbContext1 : DbContext
{
    public DbContext1() : base("DbContext1")
    {
    }
    public DbSet<Table1> Object1 { get; set; }

    public DbSet<Table2> Object2 { get; set; }

    public DbSet<Table3> Object3 { get; set; }

    public DbSet<Table4> Object4 { get; set; }
}


public class DbContext2 : DbContext
{
    public DbContext2() : base("DbContext2")
    {
    }

    public DbSet<Table1> Object5 { get; set; }
}

または、コンストラクターをオーバーロードして接続文字列を受け入れ、コードで呼び出します。

public class DbContext2 : DbContext
{
    public DbContext2(string connectionString)  : base (connectionString)
    {
    }

    public DbSet<Table1> Object5 { get; set; }
}

そして、新しいコンテキストを作成すると:

var context = new DbContext2("DbContext2");
于 2012-09-11T02:46:59.503 に答える