У меня есть объект, который имеет ObjectContext.OnSave этого объекта Я выполняю действие, используя этот 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 });
}
}
Внутри моего метода GenerateLog я беру свой Entity и отсоединяю его от ObjectContext (чтобы его можно было превратить вДвоичный объект без прохождения всех объектов Lazy Loaded).
После превращения в двоичный объект я создаю еще один объект (другого типа), который содержит двоичные данные.Я звоню this.ObjectContext.AddObject('TableName', myNewObject);
.
Затем я вызываю это на своем ранее отсоединенном объекте (entityState - предыдущее состояние сущности):
if (entity.EntityState != entityState)
{
this.ObjectContext.AddObject(entity.GetType().Name, entity);
}
На этом этапе код возвращается к методу SaveChangesAction сверху.,Ни один из этих объектов не находится в моем ObjectContext сейчас, и поэтому ни один из них не сохраняется в моей базе данных.
Я понимаю, что я уже делаю что-то плохое, изменяя объекты внутри ForEach, который влияет на них, но я понятия не имею, как еще сделатьучитывая то, что это код, который мне нужно запустить прямо перед сохранением моего ObjectContext.