我正在尝试为实体实现缓存机制.并且为了正确无误地使用实体和缓存,我需要将实体与当前上下文分离,然后将其放入缓存中,并在从缓存中获取新上下文时将其附加回新上下文.(我的上下文生命周期是每个http请求)
要求是 -
这是我尝试创建一个EntityCache类 - (ServerCache这是我的包装类,它将对象推送到ASP.NET缓存)
public static class EntityCache
{
private static DbContext context
{
get
{
return (DbContext)HttpContext.Current.Items[ObjectKeys.ContextRequestItemKey];
}
}
private static void Detach(object entity)
{
var trackedEntity = entity as IEntityWithChangeTracker;
trackedEntity.SetChangeTracker(null);
((IObjectContextAdapter)context).ObjectContext.Detach(entity);
}
private static void Attach(object entity)
{
((IObjectContextAdapter)context).ObjectContext.Attach((IEntityWithKey)entity);
}
public static void Remove(string key)
{
ServerCache.Remove(key);
}
public static object Get(string key)
{
object output = ServerCache.Get(key);
if (output != null)
Attach(output);
return output;
}
public static void ShortCache(String key, object data) …Run Code Online (Sandbox Code Playgroud) c# asp.net entity-framework entity-framework-4.1 asp.net-mvc-3
如何在对EF上下文进行查询时结合Find()使用AsNoTracking()以防止跟踪返回的对象.这是我不能做的
_context.Set<Entity>().AsNoTracking().Find(id);
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?我使用EF版本6.
注意:我不想使用SingleOrDefault(),或Where.我只是不能,因为参数Id是通用的,它是一个struct,我不能==在这种情况下应用泛型运算符.
有没有Detach(object entity)对DbContext实体框架5.
要分离实体,现在需要改变状态.也许我错过了一些东西,但这似乎比使用该Detach方法更不直观和可读:
context.Entry(myEntity).State = EntityState.Detached;
Run Code Online (Sandbox Code Playgroud)
我很想创建一个扩展方法来恢复Detach方法:
public static void Detach(this MyEntities context, object entity)
{
context.Entry(entity).State = EntityState.Detached;
}
Run Code Online (Sandbox Code Playgroud)
Microsoft删除EF 5中的DbContext.Detach()方法的原因是什么?