日期:2014-05-17  浏览次数:20478 次

顶者有分!Code First 共用数据库的问题。
前提:两项目都用 Code First,连接的是同一数据库。
问题:当一个项目执行  Update-Database ,会把另一个项目的 Table 全部 drop。

曾尝试过的步骤:
1、执行 Add-Migration 手动更新,将 DropTable 语句注释掉:两项目不能同时 Update-Database 成功,会提示有些 Table 已存在。

2、查看数据库,有个 dbo.__MigrationHistory,明白了两项目其实是共用了这个表,才出现混乱。将此表删除,问题也多多。


怎么样才能解决这个排他性?
不要告诉我,只能用不同的数据库登录名来限定,这不是我想要的答案。
------最佳解决方案--------------------
EF好蛋蛋疼
------其他解决方案--------------------
用自己的Initializer替换默认的DropCreateDatabaseAlways初始化。

你也可以从DropCreateDatabaseAlways继承一个类重写它的Seed方法。
------其他解决方案--------------------
引用:
前提:两项目都用 Code First,连接的是同一数据库。
问题:当一个项目执行  Update-Database ,会把另一个项目的 Table 全部 drop。
如果你说的 Code First(我至今还还没有机会用上——需要有几个菜鸟做项目时我才会给他们选择那类上手快的东西)就是这样,那么我绝对不会使用它。

从我很“小”的时候我就知道,一个有点经验、有大客户需要维护的数据库编程,它是需要自动升级数据库,而不是重建数据库!

当你升级的时候,结果程序吧数据库表 drop table 了,你还能使用这种东西?
------其他解决方案--------------------
好吧,纯属顶贴!
------其他解决方案--------------------
Code First 非常不现实。
难道真有哪个公司用code表述数据库,而不需要建模?
------其他解决方案--------------------
是否可以采用一个项目主同步,更新成功后把Model复制给另外一个项目
第二个项目执行add-migration ,所有的语句注释掉,执行update-database
------其他解决方案--------------------
建模吧. 也比较直观.
------其他解决方案--------------------
那就帮顶吧~!
------其他解决方案--------------------

不懂,帮顶
------其他解决方案--------------------
ef 5 不能同时有多个 context migrate,但可以同时使用多个 context。删掉历史表就行。migrate 和 使用 dbcontext 是不同的概念。
------其他解决方案--------------------
我是用dataset 处理的。 用dataset填充数据 利用她的架构关系处理的。
------其他解决方案--------------------
了解了解 
------其他解决方案--------------------
两个数据库做数据共享不就OK了
------其他解决方案--------------------
学习  现在正在学ef 
------其他解决方案--------------------
没接触过。所以就帮不上忙了。
------其他解决方案--------------------
引用:
用自己的Initializer替换默认的DropCreateDatabaseAlways初始化。

你也可以从DropCreateDatabaseAlways继承一个类重写它的Seed方法。



我已在初始化时设置关闭数据库的初始化,
        
public MyContext()
        {
            Database.SetInitializer<MyContext>(null);
        }


但这只是解决不报下列错:
The model backing the 'MyContext' context has changed since the database was created. Consider using Code First Migrations to update the database (http://go.microsoft.com/fwlink/?LinkId=238269).

执行 Update-Database 依旧问题多多。