我有一个导致脱发的问题...
我使用Code First(EF)进行项目构建;一切都很好,它就像一个魅力,然而,我找不到一个合适的方式允许数据库更改(通过.sql脚本),而没有应用程序在启动时发脾气,因为架构已经改变。
我已阅读并阅读此问题,我已删除EdmMetaData表,因此无法比较数据库的哈希值,但随后读取了EF中的一个错误,如果删除它,它仍然认为架构有已更改(因为它无法识别丢失的表,因此它会比较一个空字符串!)。
另外,我尝试在Global.asax文件中使用Database.SetInitializer(null),但这意味着我以后无法访问数据模型。
如果架构发生变化等,每个人都会讨论使用删除数据库的选项。
这就是我要找的:
对于EF / Code First来做......没事!甜蜜的FA!没出息!
...如果我通过外部应用程序更改架构,我希望它完全忽略这些更改,并且只是假设我已经通过.sql脚本对相关的模型更改进行了这些数据库更改。如果我错过了一个专栏或一张桌子,那么我接受了我的愚蠢,我希望发脾气,但是,直到我犯了一个错误,我希望EF相信我。
这意味着我可以随时使用.sql脚本轻松更新任何客户端,而不用担心EF会出现问题! :(
任何想法的人??
答案 0 :(得分:7)
使用最新的Entity Framework版本,您不再需要执行Ladislav Mrnka所说的内容。从EF 4.3开始,您只需要将WebContext的初始化程序设置为null。例如:
Database.SetInitializer<FabrikamFiberWebContext>(null);
答案 1 :(得分:5)
除了将初始化程序设置为null
之外,还要将其添加到上下文类中:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
model.Conventions.Remove<IncludeMetadataConvention>();
}
它将关闭哈希比较。