【发布时间】:2018-02-01 04:14:20
【问题描述】:
我正在开发一个在 Azure 上运行的 Web 应用程序,它必须为每个新用户注册创建一个数据库。
在控制器的 Register() 方法中,启动 CreateOrUpdateToElasticPoolAsync() 方法以运行在弹性池中创建新数据库的 API 调用。 然后,使用 Initialize() 方法,许多方法使用示例数据填充新数据库。
// POST: /Account/Register
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Register(RegisterViewModel model)
{
if (ModelState.IsValid)
{
var user = new ApplicationUser() { UserName = model.Email, Email = model.Email };
var result = await UserManager.CreateAsync(user, model.Password);
if (result.Succeeded)
{
var response = await AzureRestAPISqlDatabase.Databases.CreateOrUpdateToElasticPoolAsync("databaseName", "elasticPoolName");
var databaseEF = new BO.DatabaseEF();
databaseEF.Inizialize();
return RedirectToAction(response.StatusCode == HttpStatusCode.Accepted ? "InfoConfirmEmail" : "Error");
}
AddErrors(result);
}
return View(model);
}
Inizialize() 中包含的方法示例如下:
class Cliente
{
public static void Add()
{
var db = new DAL.Context(new BO.Account().ConnectionString);
var cliente = new Models.Cliente
{
DataModifica = DateTime.Now,
Sistema = true,
Tipo = Models.ContattoTipo.Cliente
};
cliente.Sede.Destinatario = "(nessuno)";
cliente.Destinazione.Destinatario = "(nessuno)";
db.Clienti.Add(cliente);
db.SaveChanges();
}
}
Cliente 类的 Add() 方法创建一个 Context 类 传递类似如下的connectionString参数:
"Server=tcp:XXXXXXXX.database.xxxxxx.xxx,XXXX;Initial Catalog=XXXX;Persist Security Info=False;User ID=XXXXX;Password=XXXXXX;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;"
而Context类的构造函数代码如下:
public partial class Context : DbContext
{
public Context(string connectionString) : base(connectionString)
{
Configuration.ProxyCreationEnabled = false;
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
public virtual DbSet<Cliente> Clienti { get; set; }
}
现在,如果我在远程调试配置中运行应用程序并在 Cliente 类的 Add() 方法中设置断点,运行 F10 直到方法结束,一切正常,没有错误。 如果即使在远程调试配置中也不设置中断,我会收到以下错误:
Server Error in '/' Application.
Database 'b6eaae45-8aa6-43ef-9de0-f8d22701e8f0' already exists. Choose a different database name.
即使我在发布配置中运行应用程序也会出现同样的错误。
我哪里错了?
提前致谢。
【问题讨论】:
-
由于它们共享相同的连接字符串,它将始终创建相同的数据库。
-
对不起,我不明白。谁共享相同的连接?
-
你试图解决的方法行不通。这种在不存在时创建的方法是模型优先方法。
-
感谢您的回复。我不知道从哪里开始研究这个解决方案。
-
为每个用户创建一个新数据库?我只是想知道,你为什么想要那个......也许你只是想为用户创建一个新的......我想确定你真的在尝试为每个用户创建一个新的数据库。
标签: c# asp.net-mvc entity-framework azure remote-debugging