从我的代码中首先访问数据库连接“table”类

时间:2012-08-30 11:06:34

标签: c# asp.net-mvc entity-framework-5

是否可以从代码中首先获取当前连接“table”类?

我正在尝试编写一个MVC多租户应用程序(1个应用程序,很多数据库),我能想到的最简单的方法是在创建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();
        }
    }
}

2 个答案:

答案 0 :(得分:1)

不确定这是否可能与我一样。

答案 1 :(得分: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())
{
}