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 オブジェクトを通過することなく Binary Object に変換できます)。
バイナリ オブジェクトに変換した後、バイナリ データを保持する (別のタイプの) 別のオブジェクトを作成します。私は電話しますthis.ObjectContext.AddObject('TableName', myNewObject);
。
次に、以前にデタッチしたオブジェクトでこれを呼び出します (entityState はエンティティの以前の状態です)。
if (entity.EntityState != entityState)
{
this.ObjectContext.AddObject(entity.GetType().Name, entity);
}
この時点で、コードは上記の SaveChangesAction メソッドに戻ります。現在、これらのオブジェクトはどちらも ObjectContext にないため、どちらもデータベースに保存されません。
オブジェクトに影響を与える ForEach 内のオブジェクトを変更することで、すでに何か悪いことをしていることは理解していますが、これが ObjectContext が保存される直前に実行する必要があるコードであることを考えると、他にこれを行う方法がわかりません。