加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 使用Entity Framework添加和更新实体

发布时间:2020-12-15 03:44:17 所属栏目:百科 来源:网络整理
导读:在我最后一个项目中,我使用了Entity Framework 5 Code First.我完成了我的项目,但在开发过程中遇到了很多痛苦. 我试图解释我的痛苦如下: 我的数据访问逻辑层中有几个数据类,如产品,产品分类,订单,公司,制造商等…每个类都有一些其他类的参考.例如,Product实
在我最后一个项目中,我使用了Entity Framework 5 Code First.我完成了我的项目,但在开发过程中遇到了很多痛苦.

我试图解释我的痛苦如下:

我的数据访问逻辑层中有几个数据类,如产品,产品分类,订单,公司,制造商等…每个类都有一些其他类的参考.例如,Product实例具有ProductCategory属性.

我的数据访问对象类的Add和Update方法我将上下文中的每个属性(不同于基本类型)的状态设置为Unchanged或Modified.以下是一些dao类的更新方法的一部分:

context.Entry(entity).State = System.Data.EntityState.Modified;
if (entity.Category != null)
    context.Entry(entity.Category).State = System.Data.EntityState.Unchanged;

if (entity.Manufacturer != null)
    context.Entry(entity.Manufacturer).State = System.Data.EntityState.Unchanged;

foreach (var specificationDefinition in entity.SpecificationDefinitions)
{
    context.Entry(specificationDefinition).State = System.Data.EntityState.Unchanged;
    foreach (var specificationValue in specificationDefinition.Values)
    {
        context.Entry(specificationValue).State = System.Data.EntityState.Unchanged;
    }
}

这个代码就是这样的.我的一些添加或更新方法是大约30行代码.我认为我做错了事情,添加或更新一个实体不应该是这么多痛苦,但是当我没有设置对象的状态时,我会收到数据库中的异常或重复条目.我真的要设置映射到数据库的每个属性的状态吗?

解决方法

您可以通过以下方式替换代码:
context.Products.Attach(entity);
context.Entry(entity).State = System.Data.EntityState.Modified;

这是相同的原因(除非相关实体已经在另一个状态中被附加到上下文中,而不是之前的),那么将包含所有相关实体的实体包含在对象图形中到状态为“不变”的上下文中.将状态设置为修改后,实体仅将产品的状态(不是相关实体)从“未更改”更改为“更改”.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读