MVC中的实体数据框架 - 重复错误数据库 - 第一次模型更新

时间:2018-01-09 12:41:36

标签: asp.net-mvc entity-framework

这可能是我所拥有的最大的浪费时间:我必须浪费累积的时间试图绕过它。

我正在使用Visual Studio 2015和ASP.NET MVC 5,但不认为这很重要 - 我在其他版本中遇到过这个问题。我接受这是基于我的无知。

我有一个相当复杂的SQL Server数据库,并且正在使用数据库优先模型生成。为了保持可管理性,我有大约20种不同的模型,每种模型都包含特定主题的表格。

所以,假设我想生成一个模型来包含与数据库中的地图有关的表。首先要做的是添加一个新的实体模型数据库:

enter image description here

我想将我的模型称为 webMap

enter image description here

我选择从我的数据库中生成模型:

enter image description here

我的web.config文件中有一个非常好的数据库连接字符串,所以我使用它并选择不保存:

enter image description here

然后,我选择要为其生成类的表,以及这些选项:

enter image description here

然后会发生的是它无法识别新的数据库上下文:

enter image description here

原因是(我认为)在这个文件中:

enter image description here

这创建了一个以连接字符串命名的类:

enter image description here

如果我像这样更改部分类和构造函数名称:

enter image description here

然后它解决了问题 - 直到我接下来需要更新数据库。

请原谅我对正在发生的事情的无知。虽然我喜欢实体框架所做的事情,但我发现正在发生的事情难以理解。任何善良的人都可以告诉我我做错了什么,而没有深入研究T4转换?顺便说一句,我已经尝试过清理我的解决方案并运行自定义工具了。谢谢!

3 个答案:

答案 0 :(得分:2)

打开设计器中的edmx文件,然后单击其中的某个位置以在“属性”窗口中选择概念模型。现在看看Entity Container Name属性。该值应为Entities - 我认为是从您的连接字符串名称派生而来的,并且无法在添加向导步骤中指定。

只需将其更改为所需的上下文名称(如webMap),保存/构建即可。

但请确保NamespaceEntity Container Name属性值不同。

答案 1 :(得分:1)

非常感谢 Ivan 阁楼的回答。我整理了这些信息,并在这里提出了一个对我有用的程序。我没有声称完全理解发生了什么(但这样的框架确实是我不应该这样做的。)

这是我如何设法创建我的模型。共有6个步骤。我不知道哪些可以省略,但是跟随它们都解决了我的问题。

步骤1 - 删除任何引用tblMap的现有模型

我发现我无意中创造了另一个模型。全局搜索(在我的情况下) webMap 可以帮助您查找是否处于相同的位置。

第2步 - 清除web.config文件连接字符串

我不明白为什么,但似乎web.config文件中的连接字符串在代码中显示为冲突的名称。所以我在我的web.config文件中搜索了 webMap ,并删除了包含它的所有连接字符串。我认为这是我之前省略的步骤。

第3步 - 清理并重建解决方案

我清理了解决方案(不知道是否有必要),然后重新构建它以确保我留下的唯一错误是在我的代码中引用不再存在的 webMap 数据库上下文。 / p>

步骤4 - 按照步骤添加ADO实体模型

但是......在第一个屏幕中调用项目名称,如 webMapModel ,连接字符串类似于 webMapEntities (并选择将其保存在web.config中)文件)和名称空间类似 webMapNamespace 。请注意,这些都不是我想要结束的 webMap 名称。

步骤5 - 更改实体容器名称

双击已创建的模型 .edmx 文件以打开它(这可能不是必需的 - 它可能已经打开)。单击模型的白色背景以取消选择任何实体。按F4显示属性。

enter image description here

将实体容器名称更改为 webMap ,如上所示。

第6步 - 重建解决方案

此时我的所有错误都消失了!

答案 2 :(得分:0)

您的上下文的名称应该与名称空间不同。

尝试使用此配置:

dbFirst

在下一个屏幕中: dbFirstNext here

是的,它会将下一个连接字符串添加到web.config,但没关系。