是啥导致我的 Entity Framework 数据库上下文无法生成?

Posted

技术标签:

【中文标题】是啥导致我的 Entity Framework 数据库上下文无法生成?【英文标题】:What caused my Entity Framework database context to fail to generate?是什么导致我的 Entity Framework 数据库上下文无法生成? 【发布时间】:2014-12-28 10:54:29 【问题描述】:

是否有什么东西会导致实体框架数据库上下文无法生成其文件,需要重新启动才能再次生成(这也可能会更改默认调试项目)?

我的详细信息:

所以我有一个现有的、工作的、生产中的 ASP.NET MVC 3 Web 应用程序,它使用实体框架连接到 SQL Server 2008 R2 数据库,该数据库是在 Visual Studio 2010 中构建的。

前几天,当它突然开始构建失败时,我认为我没有做任何其他事情,即编辑 CShtml 文件中的一行(删除两个对 DateTime 的 Razor 引用),报告如下:

C:...\DataLayer.cs(38,20):错误 CS0246:找不到类型或命名空间名称“FooEntities”(您是否缺少 using 指令或程序集引用?)

C:...\DataLayer.cs(57,12): error CS0246: 找不到类型或命名空间名称“FooEntities”(您是否缺少 using 指令或程序集引用?)

即,实体框架数据库连接以某种方式中断。通常定义 FooEntities 的文件是由实体框架自动生成的,该文件基本上是空的。通常它会自动生成一个定义文件,其中对 FooEntities 的引用如下所示:

public partial class FooEntities : ObjectContext

FooData.edmx 文件仍然出现在 IDE 中,但起初当我尝试使用“从数据库更新模型”重新生成它时,它什么也没做。在 Windows 7 重新启动后,该更新确实在没有任何投诉的情况下运行,并导致该定义文件重新生成。然后构建的解决方案没有错误。

但是在我这样做之后,我还发现 DataLayer 项目现在被标记为(粗体)默认调试项目,而不是 UI 项目。 有什么东西可以自动改变它,或者我可能不小心点击了一些快捷方式来改变它?

我去了我的源代码控制并做了一个差异,我的源代码或配置文件没有意外或相关的变化 - 仅在 .suo 和自动生成的实体框架文件 (.\datalayer\obj\debug \designtimeresolveassemblyreferencesinput.cache .\datalayer\datastore.context.cs)。

问题似乎解决了,有没有其他人看到过这样的事情,或者猜猜是什么原因造成的?

【问题讨论】:

【参考方案1】:

启动项目的变化是由修改的.suo文件引起的。这个Solution User Options file 存储有关特定解决方案的个人设置,其中包括启动项目。此信息不存储在 .sln 文件中。

我不知道有任何 .suo 设置会影响 edmx 文件中的代码生成,但它可能是相关的。

这里要吸取的教训是:永远不要将 .suo 文件提交到源代码管理。它们包含您的 设置,甚至是最有可能仅适用于您的机器的绝对路径(除非每个开发人员具有完全相同的文件夹结构)。因此,通过从源代码控制存储库更新您的源代码,您的设置可能会被其他人的设置覆盖。

【讨论】:

谢谢,这是很好的相关信息,很明显它可以解释在有多个用户的情况下或者我从一些旧的 suo 文件恢复的情况下对启动项目的更改。在我的情况下,我认为它不会导致这种情况,因为我是当前唯一的开发人员,并且几个月来我一直在同一个本地开发文件夹中工作,只签入到源代码管理,而不是从源代码管理更新到该文件夹因为我一直在一台开发计算机上独自工作。 diff 中的 .suo 更改确实表明设置已更改并已保存到文件中。

以上是关于是啥导致我的 Entity Framework 数据库上下文无法生成?的主要内容,如果未能解决你的问题,请参考以下文章

为啥运行时表达式会导致 Entity Framework Core 5 的缓存发生冲突?

ADO.NET Entity Framework 的实际好处是啥?

227 Mapped 类的子类型导致Entity framework 数据库上下文初始化缓慢?

使用 Entity Framework Core 和 ThreadPool 而不达到最大 SQL Server 连接

Entity Framework Core 5 - 在表上引入 FOREIGN KEY 约束可能会导致循环或多个级联路径

ASP.NET Core 5 Blazor WASM、gRPC、Entity Framework Core 5:多对多导致堆栈溢出