如何从实体中删除代理

时间:2013-02-05 15:04:31

标签: entity-framework session proxy

我需要在会话/缓存中存储用户设置(如地址,访问权限等),以便通过basecontroller(MVC项目)访问它们。

当我尝试从会话中联系到User.Address时,可以想象它会说:

  

ObjectContext实例已被释放,无法再使用   对于需要连接的操作。

地址是用户实体的导航属性。

我不想使用DTO。

有没有解决办法?

感谢。

2 个答案:

答案 0 :(得分:1)

我同意格特,但我更喜欢这样写。 (用于编译时错误检查)

public User GetUser(int userId)
{
    using (var db = new MyContext())
    {
        return db.Users.Include( p => p.Address).Single(u => u == userId);
    }
}

答案 1 :(得分:0)

从数据库中提取用户时,您必须Include该地址。例如,像这样(在存储库或服务中):

public User GetUser(int userId)
{
    using (var db = new MyContext())
    {
        return db.Users.Include("Address").Single(u => u == userId);
    }
}