我正在尝试创建一个微服务架构.我有一个无状态服务与Azure Service Cluster Fabric上部署的Entity Framework相结合.
但是我的问题是当我有一个带DropCreate
DatabaseAlways的初始化程序时,数据库被删除但没有重新创建.
我有以下初始化程序:
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复制实体框架.
编辑
我通过删除初始化程序并启用迁移来解决我的问题.启用迁移的解决方案位于Properties>下的Platform Target中.建立.在x64和x86之间切换平台目标似乎可以解决问题.配置文件中的种子功能也是一种初始化程序.
最佳答案 你的问题包括两个问题:
>数据库初始化和
>架构迁移
其中我只会解决第一个问题,因为这是您最关心的问题.
这两个问题可能是连接的,也可能不是.
初始化程序DropCreateDatabaseAlways,毫无疑问,在运行应用程序时会丢弃数据库,但它不会立即重新创建新数据库.相反,它等待特定应用程序域中的第一个上下文使用,然后才重新创建它.
https://msdn.microsoft.com/en-us/library/gg679506(v=vs.113).aspx