【问题标题】:how to insert/update entity framework entities that are partially mapped to a view?如何插入/更新部分映射到视图的实体框架实体?
【发布时间】:2015-08-07 23:06:17
【问题描述】:

我有一个带有“Equipment”表和一个名为“EquipmentStatuses”的视图的数据库,它执行一些复杂的操作来将“Equipment”表中的每个条目与另一个表中的某个聚合值相关联,并返回一个简单的 2 列视图,其中包含EquipmentId 和计算值。

我已将“设备”表映射到设备实体,并创建了一个额外的标量字段,该字段映射到视图中的计算字段。当我从数据库中检索记录时一切正常,但是当我尝试插入或更新设备表时,我从实体框架中收到错误:

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 数据库一起使用。

【问题讨论】:

    标签: c# sql-server entity-framework


    【解决方案1】:

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

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

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

    【讨论】:

    • 问题是视图没有映射到单独的对象。我当然可以这样做,但如果没有必要,它会更优雅。
    • 如果您直接在视图中修改实体,您将会遇到问题。 stevemichelotti.com/aspnet-mvc-view-model-patterns
    • 我选择了更复杂但最终更好的编写存储过程的解决方案...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-01
    • 1970-01-01
    • 2010-10-09
    • 2017-02-11
    • 2011-03-09
    • 2011-01-04
    • 1970-01-01
    相关资源
    最近更新 更多