0

我正在使用 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(federation id)连接到数据库。

private Entities _db = new Entities();

在为 dbcontext 创建实例时,我想建立基于 Shardid 的新连接。

4

1 回答 1

2

花了太多时间后,我想通了。它对我来说很好。

 var   customerEntity = new Entities(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 Entities;

必须将 EntityDatabase 连接转换为 SqlConnection,以正常方式执行联邦命令。

实体将对指定的 shardId 执行查询,连接到正确的数据库。

于 2013-09-24T07:59:11.043 回答