C# 与保存时间有关的实体框架问题

C# 与保存时间有关的实体框架问题,c#,entity-framework,objectcontext,C#,Entity Framework,Objectcontext,我有一个具有ObjectContext的对象。在保存该对象时,我正在使用该ObjectContext运行一个操作,如下所示: public void SaveChangesAction(ObjectContext context) { // Validate the state of each entity in the context // before SaveChanges can succeed. f

我有一个具有ObjectContext的对象。在保存该对象时,我正在使用该ObjectContext运行一个操作,如下所示:

public void SaveChangesAction(ObjectContext context)
        {
            // Validate the state of each entity in the context
            // before SaveChanges can succeed.
            foreach (ObjectStateEntry entry in
                context.ObjectStateManager.GetObjectStateEntries(
                EntityState.Added | EntityState.Modified))
            {
                var type = entry.Entity.GetType();
                var RepoBase = typeof(RepositoryBase<myEntityFrameworkObject>);
                MethodInfo mi = RepoBase.GetMethod("GenerateLog");
                MethodInfo constructed = mi.MakeGenericMethod(type);

                constructed.Invoke(this, new object[] { entry.Entity });
            }
        }
此时,代码从上面返回到SaveChangesAction方法。这些对象现在都不在我的ObjectContext中,因此它们都不会保存到我的数据库中。
我知道我已经在做一些不好的事情,修改ForEach中影响它们的对象,但考虑到这是我需要在保存ObjectContext之前运行的代码,我不知道该如何做

  • 那倒影很难闻。您知道您有哪些存储库,所以只需使用类型作为查找值来创建字典即可
  • 我想知道你的代码怎么可能运行。如果分离循环中的实体,它应该修改迭代集合并引发异常。可以通过在状态管理器查询中调用
    ToArray
    ToList
    来避免这种情况
  • 您正在迭代添加和修改的实体并将其分离,但在这之后,您总是将实体作为新实体添加,以便尝试插入重复的实体,而不是更新旧实体
  • 分离对象将断开所有关系。我几乎可以肯定,此操作将丢失关系中的某些更改,并且将对象添加或附加回上下文不会重新创建它们
  • 该方法将
    ObjectContext
    作为参数,但您的其他代码段使用的是
    this.ObjectContext
    ,因此这些部分与自身的关系绝对不清楚
  • 没有
    context.SaveChanges
    ,因此如果您不在其他地方调用它,这就是没有保存更改的原因
1)我的要求之一是,当EntityFramework发生变化时,我们不必改变代码。我们目前有几百个对象可以调用此代码。至于所有的分离,我同意这是一个问题,这就是我提出这个问题的原因,因为我不太了解发生了什么,不足以自己解决它。
if (entity.EntityState != entityState)
{
    this.ObjectContext.AddObject(entity.GetType().Name, entity);
}