【高分请教】请教asp.net的自动初始化数据库的问题,

vickluo119 2012-02-14 02:03:57
代码大致实现:

一个程序,用此种结构
用以下方法检查model是否发生变化,如果发生变化,将自动重建数据库;
SetInitializer
DBInitializer : DropCreateDatabaseIfModelChanges<DbContext>

问题描述:
程序在运行时,发现会自动初始化数据库,即重建数据库,将新添加的数据全部冲掉,非常危险的动作。郁闷的是我没找到原因,为啥网站在运行过程中,会自动初始化数据库,没找到什么操作可以改变数据模型的,哪个数据模型不一致导致初始化,还是其他原因造成的;

我用的asp.net 4.0 ,mssql2005,win2008r2,

请教:
1、有啥办法跟踪什么原因导致数据库被初始;比如从操作系统日志,数据日志,查看出哪个数据模型不一致导致的;
2、或哪个高手直接指点,导致这种问题的原因,代码有问题还是哪方面的原因;

急。。。,一定高分相送 ,谢谢
...全文
142 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
vickluo119 2012-02-19
  • 打赏
  • 举报
回复
非常感谢啊 caozhy ,提供的方法的确,可以行,但是我还是没搞懂,程序在正常运行过程中为啥为被,初始化呢;我查询了,这个函数应该是只有 表结构不一致的情况下才会被触发吧:

You're seeing this error because the updated Movie model class in the application is now different than the schema of the Movie table of the existing database. (There's no Rating column in the database table.)By default, when you use Entity Framework Code First to automatically create a database, as you did earlier in this tutorial, Code First adds a table to the database to help track whether the schema of the database is in sync with the model classes it was generated from. If they aren't in sync, the Entity Framework throws an error. This makes it easier to track down issues at development time that you might otherwise only find (by obscure errors) at run time. The sync-checking feature is what causes the error message to be displayed that you just saw.


EnForGrass 2012-02-14
  • 打赏
  • 举报
回复
对这个不了解
EnForGrass 2012-02-14
  • 打赏
  • 举报
回复
对这个不了解
段传涛 2012-02-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 caozhy 的回复:]

DropCreateDatabaseIfModelChanges 当模型改变就重建数据库。

如果你使用这个策略,同时又不想重新建库,有一个替代的办法,就是修改数据库里面的 ModelHash,欺骗 EFCodeFirst 让它觉得模型没有改变。至于ModelHash修改成多少,你可以配置一个测试数据库,然后生成,再把 ModeHash 值拷贝到正式的数据库里面。

似乎不是好办法,但是……
[/Quote]
是个 方法。
pmaikej 2012-02-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 caozhy 的回复:]
DropCreateDatabaseIfModelChanges 当模型改变就重建数据库。

如果你使用这个策略,同时又不想重新建库,有一个替代的办法,就是修改数据库里面的 ModelHash,欺骗 EFCodeFirst 让它觉得模型没有改变。至于ModelHash修改成多少,你可以配置一个测试数据库,然后生成,再把 ModeHash 值拷贝到正式的数据库里面。

似乎不是好办法,但是的……
[/Quote]

楼上正解,楼主尝试一下
myhope88 2012-02-14
  • 打赏
  • 举报
回复
没用过这种方式,帮顶下
threenewbee 2012-02-14
  • 打赏
  • 举报
回复
ModelHash在产生的数据库的一张单独的表里面。

有一个策略是不让它每次初始化,记不清楚名字了。如果您仅仅是不希望每次都删除的话。
threenewbee 2012-02-14
  • 打赏
  • 举报
回复
DropCreateDatabaseIfModelChanges 当模型改变就重建数据库。

如果你使用这个策略,同时又不想重新建库,有一个替代的办法,就是修改数据库里面的 ModelHash,欺骗 EFCodeFirst 让它觉得模型没有改变。至于ModelHash修改成多少,你可以配置一个测试数据库,然后生成,再把 ModeHash 值拷贝到正式的数据库里面。

似乎不是好办法,但是的确有效。
vickluo119 2012-02-14
  • 打赏
  • 举报
回复
或者想,不要触发SetInitializer此函数,asp.net检查数据模型发生变化的机制是什么,

62,052

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧