Entity framework core 如何使用实体框架核心在azure弹性池中创建数据库?

Entity framework core 如何使用实体框架核心在azure弹性池中创建数据库?,entity-framework-core,azure-sql-database,azure-sql-server,azure-elasticpool,Entity Framework Core,Azure Sql Database,Azure Sql Server,Azure Elasticpool,我想创建一个具有EntityFramework核心的数据库,该数据库将自动添加到我的azure elactic池中 我使用DatabaseFacadeExtension来实现这一点,该扩展在db创建之后执行SQL命令,如下所示: public static async Task EnsureCreatedAsync(此DatabaseFacade DatabaseFacade,字符串elasticPoolName,CancellationToken CancellationToken=defa

我想创建一个具有EntityFramework核心的数据库,该数据库将自动添加到我的azure elactic池中

我使用DatabaseFacadeExtension来实现这一点,该扩展在db创建之后执行SQL命令,如下所示:

public static async Task EnsureCreatedAsync(此DatabaseFacade DatabaseFacade,字符串elasticPoolName,CancellationToken CancellationToken=default)
{
如果(!await databaseFacade.EnsureCreatedAsync(cancellationToken))返回false;
//数据库已创建。
var dbName=databaseFacade.GetDbConnection().Database;
尝试
{
cancellationToken.ThrowIfCancellationRequested();
如果(!string.IsNullOrEmpty(elasticPoolName))
{
等待databaseFacade.ExecuteSqlCommandAsync(新的RawSqlString(
$“ALTER DATABASE{dbName}MODIFY(服务_目标=ELASTIC_池(名称=[{elasticPoolName}]);”,
取消令牌);
}
返回true;
}
抓住
{
等待databaseFacade.EnsureDeletedAsync(cancellationToken);
投掷;
}
}

它可以工作,但我更喜欢原子操作,即直接在Azure弹性池中创建数据库。

Azure弹性池支持您在现有池中或作为单个数据库创建新数据库。必须连接到主数据库才能创建新数据库

有关详细信息,请参阅:Transact-SQL:

示例T-SQL代码

在弹性池中创建数据库:

CREATE DATABASE db1 ( SERVICE_OBJECTIVE = ELASTIC_POOL ( name = S3M100 ) ) ;
请参阅:

您可以替换T-SQL语句并重试


希望这有帮助

我也遇到过类似的问题。幸运的是,我从前面的答案中得到了一些线索,并临时想出了一个解决方案

我有一个公共数据库来管理应用程序,每当有新的客户机出现时,我都需要创建一个新的数据库。因此,我必须在.NET核心应用程序中维护多个数据库上下文。另外,我的代码库中已经准备好了clientContext的迁移,这只是需要

client_db.Database.MigrateAsync();
创建数据库。但是,我无法直接在弹性池下创建它,因为Azure没有任何支持该功能的默认设置。因此,MigrateAsync总是在池外创建数据库

因此,我从公共数据库上下文中使用T-SQL命令在池中创建了数据库,然后使用MigrateAsync()迁移所有必需的模式

var commandText = "CREATE DATABASE client1 ( SERVICE_OBJECTIVE = ELASTIC_POOL ( name = demoPool ) );";
db.Database.ExecuteSqlCommand(commandText);
clientContext client_db = new clientContext(approved_corporate.Id, _configuration);
client_db.Database.MigrateAsync();
此外,我在clientContext中有一个自定义构造函数来支持这一点:

public clientContext(int client_id, IConfiguration configuration = null)
{
    string client_code = "client" + client_id.ToString();
    connection_string = configuration["ConnectionStrings:Client"].ToString().Replace("client_code", client_code);
}

是的,但我正在寻找使用实体框架(使用DbContext)创建数据库的方法。不使用transact-SQL命令。很抱歉,我没有找到关于使用实体框架(使用DbContext)创建数据库的示例。但是您可以参考这些教程,使用create语句来实现您的目的。如果我的回答有帮助,你能接受吗?谢谢,祝你今天愉快。
public clientContext(int client_id, IConfiguration configuration = null)
{
    string client_code = "client" + client_id.ToString();
    connection_string = configuration["ConnectionStrings:Client"].ToString().Replace("client_code", client_code);
}