使用实体框架添加和更新实体

2024-01-05

在我的上一个项目中,我使用了 Entity Framework 5 Code First。我完成了我的项目,但在开发过程中遇到了很多痛苦。

我试图在下面解释我的痛苦:

我的数据访问逻辑层中有几个数据类,例如 Product、ProductCategory、Order、Company、Manufacturer 等...每个类都有一些对其他类的引用。例如,Product 实例具有 ProductCategory 属性。

在数据访问对象类的 Add 和 Update 方法中,我将上下文中每个属性(基本类型除外)的状态设置为“未更改”或“已修改”。下面是一些 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;

这是相同的原因(除非相关实体已经附加到另一个状态的上下文中)Unchanged之前)是这样的Attach puts entity 包括对象图中的所有相关实体都进入状态上下文Unchanged。将状态设置为Modified之后为entity仅更改产品(而不是相关实体)的状态Unchanged to Modified.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用实体框架添加和更新实体 的相关文章

随机推荐