繁体   English   中英

DropCreateDatabaseAlways与Code First不兼容Azure Sql数据库

[英]DropCreateDatabaseAlways with Code First not working with Azure Sql Database

我正在尝试创建一个微服务架构。 我有一个无状态服务与Azure Service Cluster Fabric上部署的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:无法加载文件或程序集'StatelessServiceCompany'或其依赖项之一。尝试加载格式不正确的程序。”

我怎么能解决这个问题。 我不想通过Ado.net复制实体框架。

编辑

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

你的问题包括两个问题:

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

其中我只会解决第一个问题,因为这是您最关心的问题。 这两个问题可能是连接的,也可能不是。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM