相关疑难解决方法(0)

在EF4.1中正确地从上下文中附加和分离实体

我正在尝试为实体实现缓存机制.并且为了正确无误地使用实体和缓存,我需要将实体与当前上下文分离,然后将其放入缓存中,并在从缓存中获取新上下文时将其附加回新上下文.(我的上下文生命周期是每个http请求)

要求是 -

  1. 在分离实体时,不应删除与其关联的所有导航属性(我已经填充).
  2. 如果我想要的话,我可以更新缓存的项目(因此正确地将它们附加到新的上下文很重要).

这是我尝试创建一个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

31
推荐指数
2
解决办法
4万
查看次数

如何结合Find()和AsNoTracking()?

如何在对EF上下文进行查询时结合Find()使用AsNoTracking()以防止跟踪返回的对象.这是我不能做的

 _context.Set<Entity>().AsNoTracking().Find(id);
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?我使用EF版本6.

注意:我不想使用SingleOrDefault(),或Where.我只是不能,因为参数Id是通用的,它是一个struct,我不能==在这种情况下应用泛型运算符.

c# entity-framework

18
推荐指数
3
解决办法
7351
查看次数

使用扩展方法(EF5)返回DbContext.Detach()方法

有没有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()方法的原因是什么?

.net c# entity-framework entity-framework-5

8
推荐指数
2
解决办法
1万
查看次数