如何在Entity Framework 4.3中禁用模型兼容性检查?

40
我正在使用EF 4.3,并且有一个上下文需要与由另一个库生成的使用EF Code First 4.3的数据库进行通信。上下文抛出异常,指出“Context”上下文的模型支持已更改自创建数据库以来。请考虑使用Code First Migrations更新数据库。
在EF 4.1中,可以通过从ModelBuilder中删除IncludeMetadataConvention来禁用此功能。但是,在4.3中,此约定已被弃用并不再起作用。
我如何让EF 4.3上下文与由不同上下文构建的EF 4.3生成的数据库通信?我找到的唯一选择(远非理想)是删除元数据表,从而导致两个上下文都认为数据库不是由EF构建的。
PS:我知道这种情况可能会引起有关为什么我需要这样做的问题;我知道这远非理想,但请放心,这是我需要解决的问题,而且我没有太多可横向使用的选项。
2个回答

70

将初始化器设置为null将跳过模型兼容性检查。

Database.SetInitializer<MyContext>(null);

1
你把这个放在哪里? - jep
4
在大多数应用程序中,为您的上下文添加一个静态构造函数似乎非常有效。 - bricelam
@deepakgates 我已经在我的上下文构造函数中设置了它。 - jonas
如果出现错误,请添加 using System.Data.Entity - Leonel Sanches da Silva
如果您发现此功能未按预期工作,请检查配置文件中的EF部分。确保您的上下文具有disableDatabaseInitialization="true"。我在这方面浪费了太多时间,而且没有人在他们的答案中提到它。有关此设置的更多信息可以在https://msdn.microsoft.com/en-us/data/jj556606底部找到。 - Brian Surowiec

15

适用于 EF 4.3 或更高版本

Database.SetInitializer<MLTServerWatcherContext>(null);

或者如果使用较旧版本的EF

modelBuilder.Conventions.Remove<IncludeMetadataConvention>();

(我知道他说他正在使用EF 4.3,但我认为也有必要展示这个选项)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接