使用Entity Framework添加和更新实体

Fur*_*kan 9 c# dao entity-framework-5

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

我试着解释下面的痛苦:

我的数据访问逻辑层有几个数据类,如Product,ProductCategory,Order,Company,Manufacturer等......每个类都有一些其他类的引用.例如,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;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

Sla*_*uma 11

您可以通过以下方式替换代码:

context.Products.Attach(entity);
context.Entry(entity).State = System.Data.EntityState.Modified;
Run Code Online (Sandbox Code Playgroud)

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