将EF 4添加/附加方法转换为EF 6

本文关键字:EF 方法 转换 添加 | 更新日期: 2023-09-27 18:26:33

对于运行EF 4的应用程序,我在存储库基类中有这样的方法:

protected void Add<T>(T source, MyEntities context, bool isNew, EntityState state) where T : class
{
    if (isNew)
    {
        context.CreateObjectSet<T>().AddObject(source);
    }
    else
    {
        if (state == EntityState.Detached)
        {
            context.CreateObjectSet<T>().Attach(source);
            context.ObjectStateManager.ChangeObjectState(source, EntityState.Modified);
        }
    }
}

考虑到它运行的版本,这很好,但我正在从头开始一个将使用EF6的新项目。

我如何更新上面的函数以适应EF 6并保持原样?

我已经将CreateObjectSet更改为Set,但是AddObject不为人所知。这样做似乎对附加有效,但我不知道如何替换ObjectStateManager

将EF 4添加/附加方法转换为EF 6

IDbSet<T>包含一个Entry<T>()方法,该方法返回一个具有读/写State属性的DbEntityEntry<T>

您的代码可以转换为以下内容:

protected void Add<T>(T source, MyEntities context, bool isNew) 
    where T : class
{
    IDbSet<T> set = context.Set<T>();
    if (isNew)
    {
        set.Add(source);
    }
    else
    {
        DbEntityEntry<T> entry = set.Entry(source); 
        if (entry.State == EntityState.Detached)
        {
            set.Attach(source);
            entry.State = EntityState.Modified; 
        }
    }
}