我正在使用Asp.Net web api,实体框架& SQL Azure。在我的解决方案解决方案中,我有从数据库生成的.edmx文件。以下代码行上下文实体。
public partial class Entities : DbContext
{
public Entities(): base("name=Entities")
{ }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{ throw new UnintentionalCodeFirstException(); }
public DbSet<Activity> Activities { get; set; }
}
这是多租户应用程序,基于用户登录我需要连接到具有特定
的数据库shardId(联合身份验证)。
private Entities _db = new Entities();
在创建dbcontext实例时,我想基于Shardid建立新连接。
我做对了吗?如何动态建立新连接?
答案 0 :(得分:0)
花了太多时间后,我想通了。它对我来说很好。
var customerEntity = new CrmEDMContainer(ConnectionStringCustomerDB());
var connection = new SqlConnection();
connection =(SqlConnection) customerEntity.Database.Connection;
connection.Open();
var command = new SqlCommand();
string federationCmdText = @"USE FEDERATION Customer_Federation(ShardId =" + shardId + ") WITH RESET, FILTERING=ON";
command.Connection = connection;
command.CommandText = federationCmdText;
command.ExecuteNonQuery();
return customerEntity ;
必须将EntityDatabase连接转换为SqlConnection,以正常方式执行联合命令。
CustomerEntity将对指定的shardId执行查询,连接到正确的数据库。