DropCreateDatabaseAlways两次删除/创建数据库?

时间:2019-07-17 15:13:57

标签: c# entity-framework-6

我正在研究代码优先的Entity Framework 6.2项目。 (我使用的是PostgreSQL 10.9.2。)在测试中,我使用的是DropCreateDatabaseAlways初始化程序。我试图让一个用户(在postgres中为“ role”)将项目添加到表中,然后让另一个用户将项目添加到同一表中。但是,当第二个用户尝试写入表时,出现异常。错误状态:

  

“ 42501:必须是数据库MyTestDb的所有者。”

该异常还包括有问题的SQL语句,即“ {DROP DATABASE“ MyTestDb”}“。显然,EF6正在第二次尝试删除/创建数据库。

这是预期的行为吗?我以为DropCreateDatabaseAlways只会在第一次创建关联的DbContext对象时删除/创建数据库。 (据我所知,在我的app.config中没有任何时髦的东西会引起这种情况。)

我将代码精简为要点,如下所示:

using System.Data.Entity;
namespace DbInitTest
{
    class Program
    {
        static void Main(string[] args)
        {
            Database.SetInitializer(new DropCreateDatabaseAlways<ThingContext>());

            using (var context = new ThingContext("Server=localhost;Port=5432;User Id=postgres;Password=blah;Database=MyTestDb"))
            {
                context.Things.Add(new Thing { Name = "Name1" });
                context.SaveChanges();
            }

            using (var context = new ThingContext("Server=localhost;Port=5432;User Id=nonRootUser;Password=blah;Database=MyTestDb"))
            {
                context.Things.Add(new Thing { Name = "Name2" });
                context.SaveChanges();
            }
        }
    }

    public class Thing
    {
        public int ThingId { get; set; }
        public string Name { get; set; }
    }

    public class ThingContext : DbContext
    {
        public ThingContext(string connString) : base(connString) { }
        public DbSet<Thing> Things { get; set; }
    }
}

0 个答案:

没有答案