首页 新闻 会员 周边

EF Code first Migration 问题

0
悬赏园豆:50 [已解决问题] 解决于 2016-03-02 17:53

首先使用的EF版本是6.0,请看项目的结构:

在这个解决方案中,Core和Web两个项目分别有一个DbContext,我配置的是这两个DbContext指向 同一个数据库。同时两个项目我都分别开启了Migration,如图:

 

当我修改了Core中的实体类,用Migration命令执行完迁移的时候,在单元测试中(Test项目)调用Core中的DbContext执行数据库操作不报错。

但是在运行Web项目时,调用Core中的 DbContext进行数据库操作就会报错,说是模型已经变更:

异常的详细信息:

   在 System.Data.Entity.CreateDatabaseIfNotExists`1.<>c__DisplayClass1.<InitializeDatabase>b__0()
   在 System.Data.Entity.Internal.MigrationsChecker.IsMigrationsConfigured(InternalContext internalContext, Func`1 databaseExists)
   在 System.Data.Entity.CreateDatabaseIfNotExists`1.InitializeDatabase(TContext context)
   在 System.Data.Entity.Internal.InternalContext.<>c__DisplayClasse`1.<CreateInitializationAction>b__d()
   在 System.Data.Entity.Internal.InternalContext.PerformInitializationAction(Action action)
   在 System.Data.Entity.Internal.InternalContext.PerformDatabaseInitialization()
   在 System.Data.Entity.Internal.LazyInternalContext.<InitializeDatabase>b__4(InternalContext c)
   在 System.Data.Entity.Internal.RetryAction`1.PerformAction(TInput input)
   在 System.Data.Entity.Internal.LazyInternalContext.InitializeDatabaseAction(Action`1 action)
   在 System.Data.Entity.Internal.LazyInternalContext.InitializeDatabase()
   在 System.Data.Entity.Internal.InternalContext.Initialize()
   在 System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType)
   在 System.Data.Entity.Internal.Linq.InternalSet`1.Initialize()
   在 System.Data.Entity.Internal.Linq.InternalSet`1.get_InternalContext()
   在 System.Data.Entity.Infrastructure.DbQuery`1.System.Linq.IQueryable.get_Provider()
   在 System.Linq.Queryable.Where[TSource](IQueryable`1 source, Expression`1 predicate)
   在 BI_DIM_MS.Core.BLL.DimTableInfoBLL.GetAllDimTableInfoPage(Int32 iDisplayStart, Int32 iDisplayLength) 位置 F:\WorkZone\WorkProjects\BI\SVN\Ongoing source code\BI_DIM_MS\BI_DIM_MS.Core\BLL\DimTableInfoBLL.cs:行号 59

初用EF,怀疑是两个DbContext冲突了,还请高手指点,谢谢。

于为源的主页 于为源 | 小虾三级 | 园豆:956
提问于:2016-03-02 16:52
< >
分享
最佳答案
0

为何要两个 DbContext,实体更新,那两个DbContext都要 update-database

收获园豆:50
Yu | 专家六级 |园豆:12980 | 2016-03-02 17:23

 不用两个都update的,从6.0开始可以让两个DbContext连接同一个数据库了。结果多番实验,终于找到了问题,是一个很愚蠢的错误。Web中的EF版本是6.0.0而Core中的版本是6.1.3,所以才出的错。

 

谢谢啦

于为源 | 园豆:956 (小虾三级) | 2016-03-02 17:50
其他回答(1)
0

谢谢兄台的回答

于为源 | 园豆:956 (小虾三级) | 2016-03-02 17:51
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册