Tho*_*hew 24 asp.net-mvc entity-framework exception linq-to-sql
使用Entity Framework在LINQ to SQL的帮助下进行更新时,会抛出异常.
System.Data.UpdateException: Unable to update the EntitySet 't_emp' because it has
a DefiningQuery and no <UpdateFunction> element exists in the
<ModificationFunctionMapping>
Run Code Online (Sandbox Code Playgroud)
更新代码是:
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)
{
}
}
Run Code Online (Sandbox Code Playgroud)
为什么我收到此错误?
三件事:
不要捕捉你无法处理的异常.你正在捕捉每一个可能的异常,然后不做任何事情(除了吞咽它).这是一件坏事™如果出现任何问题,你真的想默默地做什么吗?这导致了很难调试的损坏状态.不好.
Linq to SQL是一个ORM,实体框架也是如此.您可能正在使用LINQ来更新对象,但是您没有使用Linq to SQL,而是使用实体框架(Linq to Entities).
您是否尝试过此处概述的解决方案?您发布的例外有些截止,所以我不能确定它是完全相同的(如果不是,请更新您的帖子),如果它是相同的,您可以评论以下是否适用于您?
"[..]实体框架不知道给定视图是否可更新,因此它添加了
<DefiningQuery>元素以防止框架尝试针对不可更新视图生成查询.如果您的视图是可更新的,则只需
<DefiningQuery>从.edmx的StorageModel部分内的视图的EntitySet定义中删除该元素,并且正常更新处理将与任何其他表一样工作.如果您的视图不可更新,则必须通过"修改函数映射"自行提供更新逻辑.修改函数映射调用.edmx的StorageModel部分中定义的函数.该函数可能包含数据库中存储过程的名称和参数,或者您可以使用"定义命令"直接在
StorageModel您的部分的函数定义中编写插入,更新或删除语句.edmx." (强调我的,格式化为清晰和Stack Overflow格式
(来源:MSDN上的"Mike" )
| 归档时间: |
|
| 查看次数: |
22023 次 |
| 最近记录: |