Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 为什么我会得到一个“a”;无法更新EntitySet,因为它有一个DefiningQuery…“;尝试更新实体框架中的模型时发生异常?_Asp.net Mvc_Entity Framework_Linq To Sql_Exception - Fatal编程技术网

Asp.net mvc 为什么我会得到一个“a”;无法更新EntitySet,因为它有一个DefiningQuery…“;尝试更新实体框架中的模型时发生异常?

Asp.net mvc 为什么我会得到一个“a”;无法更新EntitySet,因为它有一个DefiningQuery…“;尝试更新实体框架中的模型时发生异常?,asp.net-mvc,entity-framework,linq-to-sql,exception,Asp.net Mvc,Entity Framework,Linq To Sql,Exception,使用实体框架在LINQ的帮助下更新到SQL时,会引发异常 System.Data.UpdateException: Unable to update the EntitySet 't_emp' because it has a DefiningQuery and no <UpdateFunction> element exists in the <ModificationFunctionMapping> 为什么会出现此错误?三件事: 不要捕捉无法处理的异常。你捕

使用实体框架在LINQ的帮助下更新到SQL时,会引发异常

System.Data.UpdateException: Unable to update the EntitySet 't_emp' because it has 
a DefiningQuery and no <UpdateFunction> element exists in the   
<ModificationFunctionMapping>
为什么会出现此错误?

三件事:

  • 不要捕捉无法处理的异常。你捕获了所有可能的异常,然后什么也不做(除了吞咽它)。那是件坏事™ 如果出了问题,你真的想默默地什么都不做吗?这会导致很难调试的损坏状态。不太好

  • LINQtoSQL是一种ORM,实体框架也是。您可能正在使用LINQ更新对象,但您没有使用LINQtoSQL,而是使用实体框架(LINQtoEntities)

  • 你试过这个解决办法吗?你发布的例外有点被切断,所以我不能确定它是否完全相同(如果不是,请更新你的帖子),如果是相同的,你能评论一下以下内容是否适合你吗

  • “[…]实体框架不知道给定视图是否可更新 或者不是,因此它添加了
    元素以保护 阻止框架尝试对 不可更新的视图

    如果视图是可更新的,只需删除
    元素的内部视图的EntitySet定义中的元素 .edmx的StorageModel部分,以及正常的更新处理 将与任何其他表一样工作

    如果视图不可更新,则必须提供更新 通过“修改函数映射”对自己进行逻辑分析 修改函数映射调用中定义的函数 .edmx的StorageModel部分。该函数可能包含 数据库中存储过程的名称和参数,或者 使用“定义命令”写入插入、更新或 直接在函数定义中删除语句
    StorageModel
    部分的
    .edmx
    ”(为清晰起见和防止堆栈溢出,请强调我的格式,后期格式化)


    (来源:“Mike”on)

    问题在于表格结构为了避免错误,我们必须在表中创建一个主键。之后,更新edmx。该问题将得到解决,但如果使用MVC Asp.net,则可以在模型中设置主键


    只需打开表中的model.edmx,转到字段属性并设置
    Entity Key=True

    谢谢您的帮助。问题在于表格结构。定义主键后,将不会出现任何异常。确认后,需要在表上设置PK(复合PK即可)。删除DefiningQuery会让事情变得更糟。为此,有人删除了表上的PK!
    public void Updateall()
        {
            try
            {
    
    
                var tb = (from p in _te.t_emp
                          where p.id == "1"
                          select p).FirstOrDefault();
                tb.ename = "jack";
    
                _te.ApplyPropertyChanges(tb.EntityKey.EntitySetName, tb);
                _te.SaveChanges(true);
            }
            catch(Exception e)
            {
    
            }
        }