如何插入/更新部分映射到视图的实体框架实体

本文关键字:实体 映射 视图 框架 更新部 何插入 插入 | 更新日期: 2023-09-27 18:06:47

我有一个数据库,其中有一个'Equipment'表和一个名为' equipmentstatus '的视图,该视图将'Equipment'表中的每个条目与另一个表中的一些聚合值关联起来,并返回一个简单的2列视图,其中包含设备id和计算值。

我已经将'Equipment'表映射到Equipment实体,并创建了一个额外的标量字段,该字段映射到来自视图的计算字段。当我从数据库中检索记录时,一切都很好,但是当我试图插入或更新设备表时,我从实体框架中得到一个错误:

Unable to update the EntitySet 'EquipmentStatuses' because it has a DefiningQuery and no <InsertFunction> element exists in the <ModificationFunctionMapping> element to support the current operation.

似乎实体框架正试图插入一些东西到视图中,但失败了,因为我实际上没有告诉EF如何做到这一点。但是,视图中的单个字段不需要更新,因为它是从另一个表自动计算出来的。

是否有一种方法可以告诉实体框架忽略视图,只是更新设备表,而不需要编写各种样板插入/更新/删除存储过程?

我使用EF6与SQL Server数据库。

如何插入/更新部分映射到视图的实体框架实体

您可以将该对象从上下文中分离出来:

dbContext.Entry(EquipmentStatuses).State = EntityState.Detached;

如果这是MVC,你还可以组合视图模型,将它们发送给视图,然后在POST上将它们映射回适当的实体。像Automapper这样的工具就非常适合。