您的位置:首页 > 其它

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

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





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

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





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




这里强调一点,你要同时修改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" />

现在你可以像处理表格一样处理这里的视图了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐