1

コードの最初の「テーブル」クラス内から現在の接続にアクセスすることは可能ですか?

私はMVCマルチテナンシーアプリ(1つのアプリ、多くのdb)を作成しようとしていますが、dbcontextを作成するときに接続文字列(またはテナント名)を渡すのが最も簡単な方法です(他の方法を検討しました)これですが、実際には理解していません)。ただし、テーブルクラスに入ると、現在のデータベース接続にアクセスして、必要な他のアクションを実行できなくなります。

サンプルコード

public class ConnectionContext : DbContext
{
    public ConnectionContext(String connectionString) 
        : base(connectionString)
    {
        if (!this.Database.Exists())
            throw new Exception("Database does not exist");
    }

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

[Table("Table1")]
public class Table1
{
    [Key]
    public String Column1 { get; set; }

    public String Column2 { get; set; }

    public Int32 GetNoOfColumns()
    {
        using (var conn = new ConnectionContext("???")) // <-- **issue here**
        {
            //Code to get info

            return 0;
        }
    }

    public void Authorize()
    {
        using (var conn = new ConnectionContext("???")) // <-- **issue here**
        {
            this.Column2 = "Authorized";

            conn.Entry(this).State = EntityState.Modified;
            conn.SaveChanges();
        }
    }
}
4

2 に答える 2

1

私が見ていた方法でそれが可能かどうかはわかりません。

于 2012-10-08T11:12:04.167 に答える
0

接続文字列パラメーターを使用してコンストラクターを作成する必要はありません。次のように dbcontext クラスを作成できます。

public class ConnectionContext : DbContext
{
    public ConnectionContext() 
        : base("nameOrConnectionString")
    {
        if (!this.Database.Exists())
            throw new Exception("Database does not exist");
    }

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

次に、接続コンテキストを次のように呼び出します。

using (var conn = new ConnectionContext())
{
}
于 2012-08-30T11:12:54.117 に答える