实体框架分离实体无法正常工作

时间:2016-08-01 14:41:16

标签: c# json entity-framework serialization

我正在课堂上实施一些通用审核。我想要的是将一个实体从上下文中分离出来并序列化它,并将序列化实体的JSON字符串保存在我的审计逻辑中。但由于某些对象有引用,显然序列化因此失败。所以我实现了逻辑设置为所有class.PropertyType.IsGenericType的null并且工作正常。但是在创建我的审计日志并调用context.SaveChanges之后,它保存了我取消设置某些属性更改的实体,即使我确实将其从上下文中分离出来。

无论如何,我可以使这段代码有用吗?

注意:newItem实际上仍被上下文跟踪...

context.Entry<T>( newItem ).State = System.Data.Entity.EntityState.Detached;
context.SaveChanges();

var props = newItem.GetType().GetProperties().Where( p => p.PropertyType.IsGenericType );

foreach ( var item in props )
{
   item.SetValue( newItem, null );
}

AuditLog log = new AuditLog()
{
   CreatedOn = DateTime.Now,
   ModifiedOn = DateTime.Now,
   Type = ( Int32 ) activity,
   ActionTable = newItem.GetType().Name,
   Userid = ( ( CurrentUser != null ) ? CurrentUser.Id : 0 ),
   AfterImage = new JavaScriptSerializer().Serialize( newItem ),
   ModifiedBy = ( ( CurrentUser != null ) ? CurrentUser.Email : "System" ),
   Comments = String.Format( "Created a new {0}", newItem.GetType().Name ),
   BeforeImage = ( oldItem != null ) ? new JavaScriptSerializer().Serialize( oldItem ) : String.Empty,
   ObjectId = ( Int32 ) newItem.GetType().GetProperties().FirstOrDefault( x => x.Name == "Id" ).GetValue( newItem ),
   Parameters = new JavaScriptSerializer().Serialize( HttpContext.Current.Request.RequestContext.RouteData.Values )
};

context.Logs.Add( log );
context.SaveChanges(); // When I execute this, the changes in the foreach loop are saved for that newItem

提前致谢。

0 个答案:

没有答案