31

我有几个可根据http://technet.microsoft.com/en-us/library/ms187956.aspx更新的视图。

我的所有观点都遵循上述文章中的规范。我已经在 SQL Management Studio 中验证了可以更新、插入和删除视图。

我所做的研究使我有两个选项可以使我的 Entity Framework 5/6 模型中的视图可更新:

  1. 从每个视图中删除标记,但是,在从数据库更新上下文时,MyContext.edmx 中所做的任何工作都会被覆盖。这意味着这个解决方案对我的项目来说不是很可行。

  2. 为每个视图添加插入、更新和删除存储过程,并在设计器中映射它们。我不是特别喜欢必须创建这么多存储过程的想法。

是否有任何简单的方法可以告诉 EF5 或 EF6 可以添加/更新/删除视图,在运行后续“从数据库更新模型”命令时不会被清除,而无需为每个条目方法编写存储过程(插入、更新,删除)在每个视图上?

4

3 回答 3

8

我认为您最简单的方法是在 StorageModel 中更改 EntitySet 的定义,以告诉它将其视为表,而不是数据库视图。

查看 XML 定义,它说

<EntitySet Name="Products" store:Type="Views" ..

你把它改成

<EntitySet Name="Products" store:Type="Tables" ..

(注意“产品”只是一个示例)这应该在您的 .edmx 文件中。
参见第 44 页,Lerman,“Programming Entity Framework”,第 2 版。

希望这可以帮助。

于 2014-04-13T06:24:34.680 回答
1

我认为不要使用 .edmx,而是使用 poco 类并使用 dbcontext 和 modelbuilder 类来映射其非常轻量级的映射,或者每次更新数据库时都不会更新它。它非常高效且可扩展

希望它会有所帮助。

于 2015-08-27T18:47:24.433 回答
0

您可以从视图中获取主键并使用主键执行更新语句。只是一种解决方法。

于 2015-08-28T03:05:44.777 回答