C# CreateDatabaseIfNotExists.InitializeDatabase是原子的吗?
这似乎是一个显而易见的问题,但C# CreateDatabaseIfNotExists.InitializeDatabase是原子的吗?,c#,entity-framework,C#,Entity Framework,这似乎是一个显而易见的问题,但CreateDatabaseIfNotExists.InitializeDatabase是原子的吗 目前我有类似于下面的代码。这是为了确保数据库创建完全完成,或者数据库不存在 public class MyContext : CreateDatabaseIfNotExists<MyContext> { public override void InitializeDatabase(MyContext context) {
CreateDatabaseIfNotExists.InitializeDatabase
是原子的吗
目前我有类似于下面的代码。这是为了确保数据库创建完全完成,或者数据库不存在
public class MyContext : CreateDatabaseIfNotExists<MyContext>
{
public override void InitializeDatabase(MyContext context)
{
base.InitializeDatabase(context);
//Removed custom initialization code
}
protected override void Seed(MyContext context)
{
//Removed adding / updating seed data
context.SaveChanges();
base.Seed(context);
}
}
public static class DbCreator
{
public static void CreateDatabase()
{
using (MyContext dbContext = new MyContext())
{
try
{
var dbIntializer = new MyDbInitializer();
dbIntializer.InitializeDatabase(dbContext);
}
catch (Exception ex)
{
dbContext.Database.Delete();
throw;
}
}
}
}
公共类MyContext:CreateDatabaseIfNotExists
{
public override void InitializeDatabase(MyContext上下文)
{
base.InitializeDatabase(上下文);
//已删除自定义初始化代码
}
受保护的覆盖无效种子(MyContext上下文)
{
//已删除添加/更新种子数据
SaveChanges();
种子(上下文);
}
}
公共静态类DbCreator
{
公共静态void CreateDatabase()
{
使用(MyContext dbContext=new MyContext())
{
尝试
{
var dbinitializer=new MyDbInitializer();
dbinitializer.InitializeDatabase(dbContext);
}
捕获(例外情况除外)
{
dbContext.Database.Delete();
投掷;
}
}
}
}
我已经在一些明显的地方寻找答案,例如
我使用的是实体框架6.1.3这有关系吗?当数据库尚未创建时,您真的希望在同一时刻有两个调用吗?需要知道时,只需检查context.database.Exists()。DML在大多数情况下不是事务性的。创建数据库不是事务性的。通过失去事务部分,这不再是一个原子操作,因此您寻找的答案是否定的。@NorbertvanNobelen谢谢,这回答了我的问题。