我有一个带有'Equipment'表的数据库和一个名为'EquipmentStatuses'的视图,它做了一些复杂的工作,将'Equipment'表中的每个条目与另一个表中的某个聚合值相关联,并返回一个简单的2列视图。 EquipmentId和计算值。
我已将'Equipment'表格映射到Equipment实体,并创建了一个额外的标量字段,该字段映射到View中的计算字段。当我从数据库中检索记录时,一切正常,但是当我尝试插入或更新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如何做到这一点。但是,视图中的单个字段不需要更新,因为它是从另一个表自动计算的。
有没有办法告诉实体框架忽略视图并只更新Equipment表而不编写各种样板插入/更新/删除存储过程?
我正在使用带有SQL Server数据库的EF6。
答案 0 :(得分:1)
您可以从上下文中分离该对象:
dbContext.Entry(EquipmentStatuses).State = EntityState.Detached;
如果这是MVC,您还可以编写视图模型,将它们发送到视图,然后将它们映射回POST上的正确实体。像Automapper这样的工具非常适用于此。