EF学习杂记34:如何在EF中使用可更新视图

本文介绍如何在Entity Framework (EF) 中优化对具有可更新功能的数据库视图的操作,包括设置主键、将视图作为表格处理及解决更新限制等问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

假设你在数据库中有一个可以更新的视图(如何实现数据库中可更新的视图我还不是很清楚),你准备在EF中使用该视图,当你把这个视图展现在EF可视编辑器中的时候大致是下面这样的:

Model

你可以从上面的途中看到,每个属性前面的图表中都有一个锁的标注,这是因为这个实体对象所对应的是数据库中的视图,EF并不知道哪些属性而已作为主键,所以它就假设所有非空属性都作为主键的一个属性。

修正上面的问题

首先要做的是,上面的视图中,我们知道ID是主键,你可以在XML编辑器中打开EDMX文件,同时修改EntityType属性,如下图所示:

EntityKey

修改<Key>节点中的属性像下面这样:

EntityKeyUpdated
这里强调一点,你要同时修改EDMX文件中的<edmx:StorageModels> 和<edmx:ConceptualModels>两个节点中的内容,因为要同时让两个模型接受这个变化。

把视图当做表格来对待

这个时候你已经可以很好的利用EF来对Employees进行查询了。

但是EF不允许你对这个实体进行更新操作,常见的方式是通过创建存储过程或者通过数据库自定义函数的方式来进行更新操作。但事实是这个视图已经具有可更新的功能,这很显然不是我们理想的情况。幸运的是,现在有一个变通方案,可以让EF以Table的方式来处理视图。你需要改变EDMX文件中的EntitySet节点来使这个改变生效,如下:

<EntitySet Name="Employees" 
EntityType="Tip34Model.Store.Employees"
           store:Type="Views"
           store:Schema="dbo"
           store:Name="Employees">
  <DefiningQuery>SELECT
  [Employees].[ID] AS [ID],
  [Employees].[Firstname] AS [Firstname],
  [Employees].[Surname] AS [Surname],
  [Employees].[Email] AS [Email]
  FROM [dbo].[Employees] AS [Employees]
  </DefiningQuery>
</EntitySet>

替换成如下的代码:

<EntitySet Name="Employees" 
           EntityType="Tip34Model.Store.Employees" 
           store:Type="Tables"
           Schema="dbo" />

现在你可以像处理表格一样处理这里的视图了。

转载于:https://www.cnblogs.com/brusehht/archive/2010/08/31/1813692.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值