entity-framework - DropCreateDatabaseAlways 使用 Code First 不适用于 Azure Sql 数据库

标签 entity-framework azure ef-code-first azure-service-fabric entity-framework-migrations

我正在尝试创建一个微服务架构。我有一个无状态服务与部署在 Azure 服务集群结构上的 Entity Framework 相结合。 但是我的问题是,当我有一个带有 DropCreateDatabaseAlways 的初始化程序时,数据库会被删除但不会重新创建。

我有以下初始化程序:

class CompanyInitializer : DropCreateDatabaseAlways<CompanyContext>
{
    protected override void Seed(CompanyContext context)
    {
        var companies = new List<Company>
        {
            new Company { Name = "AAA", City = "Eindhoven", Streetname="Street 12" },
            new Company { Name = "BBB", City = "Rotterdam", Streetname = "Street 12" },
            new Company { Name = "CCC", City = "Eindhoven", Streetname = "Street 12" }
        };

        companies.ForEach(s => context.Companies.Add(s));
        context.SaveChanges();

        base.Seed(context);
    }
}

具有以下上下文:

public class CompanyContext : DbContext
    {
        public CompanyContext(string connectionString) : base(connectionString)
        {
            this.Database.Connection.ConnectionString = connectionString;
            Database.SetInitializer<CompanyContext>(new CompanyInitializer());
        }
        public DbSet<Company> Companies { get; set; }
    }

我通过无状态服务的构造函数连接它们:

public StatelessServiceCompany(StatelessServiceContext context)
            : base(context)
        {
            _databaseConnectionstring = WebConfigurationManager.AppSettings["Entity.Framework.ConnectionString"];
            _context = new CompanyContext(_databaseConnectionstring);

            new CompanyInitializer().InitializeDatabase(_context);
        }

连接字符串如下:

Data Source=*****.*****.****.***;Initial Catalog=******;Integrated Security=False;User ID=********;Password=********;Connect Timeout=30;Encrypt=True;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False

问题是数据库被删除但从未重新创建。我认为在 Azure 平台上通过代码创建数据库的权利缺失。

其次,服务集群结构不允许我为项目启用迁移。通过包管理器控制台启用迁移时,出现以下错误:

"System.BadImageFormatException: Could not load file or assembly 'StatelessServiceCompany' or one of its dependencies. An attempt was made to load a program with an incorrect format."

我该如何解决这个问题。我不想通过 Ado.net 复制 Entity Framework 。

编辑

我通过删除初始化程序并启用迁移解决了我的问题。启用迁移的解决方案位于属性 > 构建下的平台目标中。在 x64 和 x86 之间切换平台目标似乎可以解决问题。配置文件中的种子函数也是一种初始化器。

最佳答案

您的问题包含两个问题:

  • 数据库初始化和
  • 架构迁移

我只会解决第一个问题,因为这是您最关心的问题。 这两个问题可能有联系,也可能没有联系。

毫无疑问,初始化程序DropCreateDatabaseAlways会在您运行应用程序时删除数据库,但不会立即重新创建新数据库。相反,它会等待特定应用程序域中的第一次上下文使用,然后才重新创建它。

https://msdn.microsoft.com/en-us/library/gg679506(v=vs.113).aspx

关于entity-framework - DropCreateDatabaseAlways 使用 Code First 不适用于 Azure Sql 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40171462/

相关文章:

c# - 存储库模式和一对多关系

powershell - 如何下载特定订阅的 Azure PublishSettings 文件

c# - 如何建模自引用对象类型?

entity-framework - Update-Database(在包管理器控制台中使用)的反向是什么?

c# - Linq Navigation Properties complex where ID in (select id from...)

sql-server - 在 LINQ 中选择具有奇怪值 @p__linq__0

c# - ASP.NET 文件上传在 Windows Azure 中不起作用

azure - 防伪 token 和资源不可用

mysql - 如何使用Data Annotations继承类

c# - EF Code First 中的多对多关系表示