我们的应用程序在同一个应用程序数据库中有两个上下文。每个背景都清晰地分为关注点。
现在似乎如果我有两个上下文,Context1和Context2,如果我只更改Context2的类,EF 5.0认为甚至Context1已经改变。这似乎混淆了EF 5.0并且似乎触发了 两者 的迁移。在错误检测之后,生成的迁移也不一致。我们处于一个奇怪的死胡同,由于这个和我们自己的疏忽,很可能不得不重新整个数据库重建:((上下路径不一致)
所以, 问题:
THX
背景故事详情(可以跳过):
我们通过代码优先的流畅api,添加测试数据,测试它然后添加“实时”(alpha阶段)数据,仔细设置两个'schemas'。 Context1带有关键的“实时”信息,因此我们保持不变,然后我通过向代码第一类添加新成员(db语言中的表中的新列)来修改第二个上下文(此处为context2
)。当我运行该应用程序时,它似乎已经检测到已经改变了!在我们的最后,认为不会调用未更改的Context1,我们没有注释掉
我们在启动期间添加了Database.SetInitializer<Context1>(new DropCreateDatabaseIfModelChanges<Context1>());
。所以它消灭了我们现在成熟的关键表!是的,我们应该把它拿出来,因为简单地锁定类定义还不够好。
答案 0 :(得分:4)
单个数据库的多个上下文不能很好地工作,但应该有一个简单的解决方法。创建一个除了迁移之外永远不会在应用程序逻辑中使用的上下文。将来自其他上下文的所有实体的实体映射添加到用于数据库创建/迁移的中央上下文。
顺便说一下。 EF is open source所以你可以自己贡献并添加对多个上下文的支持。