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谢谢,这回答了我的问题。