使用数据库中的更新模型添加只读视图

Posted

技术标签:

【中文标题】使用数据库中的更新模型添加只读视图【英文标题】:Adding a Read-Only View using Update Model from database 【发布时间】:2012-09-05 15:50:49 【问题描述】:

我正在尝试使用 .edmx 文件中的 从数据库更新模型 选项将只读视图添加到实体数据模型。我一直在谷歌上搜索这个问题,我去的每个网站和我点击的问题都说我需要添加一个主键。我知道添加这个视图是可能的,因为我在使用同一个数据库之前已经这样做了,我只是不记得我是怎么做到的。我无法向视图添加键,因为它是只读的,因此该答案对我不起作用。我知道这个问题之前已经被问过,但老实说,他们都链接到没有提供好的答案的相同问题。我 100% 确定我可以将此视图添加到实体模型中,在我弄清楚之后,如果没有其他人可以告诉我如何做,我将在此处发布如何做。与此同时,我想我会问你们是否知道如何将这个视图添加到模型中。谢谢你的帮助!希望你有一个美好的一天!

【问题讨论】:

您的问题在哪里:尝试添加视图时遇到问题?它会产生错误吗?添加后在 edmx 中看不到视图? @RaphaëlAlthaus 是的,当我尝试使用从数据库中的更新模型选项添加视图时,该视图可用,但单击完成后,视图不在 .edmx 文件中。我确信这是因为视图是只读的并且不包含主键。正如我在问题中所说的,我之前能够添加相同的视图,我只是不记得我的老板是如何不小心删除了我们的整个数据库的,所以我正在尝试从头开始重建它。 【参考方案1】:

即使是只读视图,它也需要 PK(唯一标识行)才能从数据库中正确检索。

此外,PK 必须是不可为空的字段。我不得不在视图的选择语句中添加 ISNULL(Field, 0) 作为字段。

【讨论】:

【参考方案2】:

嗯,我记得遇到过同样的情况。

如果一样的话:

使用 xml 编辑器打开您的 edmx(Visual Studio,打开方式...)。

您应该在文件中引用您的视图,但已注释。

如果这仍然是真的(我的情况就是这样),可以在这里找到解决方案: http://social.msdn.microsoft.com/Forums/en/adodotnetentityframework/thread/fbc69ed3-dd2e-4308-bbf2-0ce330526a4f

第一个解决方案(添加键)是可以的:您将键添加到模型,而不是视图。 但是如果你从数据库中更新模型,这些更改将会丢失......

【讨论】:

感谢您的快速回复!在我对这个问题进行的极端谷歌搜索和堆栈溢出搜索期间,我还发现了这个博客。我不能使用这个解决方案,因为由于缺少主键,视图永远不会被添加到 .edmx 文件中。在我将视图添加到 .edmx 文件后,我记得唯一要做的部分是必须单击“从模型生成数据库”。所以我被卡住了,直到我记得或弄清楚如何将视图添加到 .edmx 文件中。不过谢谢你的想法!

以上是关于使用数据库中的更新模型添加只读视图的主要内容,如果未能解决你的问题,请参考以下文章

在不同的线程中拥有 Qt 只读模型和视图

如何在不将实例模型添加到数据库的情况下向实体模型添加FK约束?

模型更改时视图中的列表不会更新

Laravel / Lumen 只读模型?

使用只读用户访问 SQL Server 主数据库中的系统视图

sqlite:只读数据库中的临时表/视图?