日期:2014-05-17  浏览次数:20550 次

序列化为Json时,出现“此 ObjectContext 实例已释放,不可再用于需要连接的操作。”错误,求各位大哥解答
C# code
public List<User> SelectByName(string name)
        {
            using (CleverTourEntities context = new CleverTourEntities())
            //CleverTourEntities context = new CleverTourEntities();
            {
                var user = from u in context.User
                           where u.Name == name
                           select u;
                //UserList =  user.ToList();
                return user.ToList();
            }
        }

我对想上述方法获取到的List<User>序列化为Json对象,通过
C# code
public static string EntityToJson(object o)
        {
            //设置Json序列化格式
            JsonSerializer js = new JsonSerializer();
            //JSON中的Key名称采用驼峰命名法,且首字母小写
            js.ContractResolver = new CamelCasePropertyNamesContractResolver();

            string rtn = "";
            rtn = JArray.FromObject(o, js).ToString();
            return rtn;

        }
实现
运行时就汇报“此 ObjectContext 实例已释放,不可再用于需要连接的操作。”的错误,我知道using语句后,context对象会被释放。去掉using就可以了。我在这篇文章中http://www.cnblogs.com/kirinboy/archive/2010/01/04/dispose-datacontext-or-not.html看到说,对于Linq to sql,没必要使用using语句,那么对于linq to entity 是不是也没必要呢?
或者有什么别的解决方法吗?望各位哥哥指点

------解决方案--------------------
没必要using。不过如果要用的话,
你先定义个List<User> users = new List<User>();
在using里面赋值users=user.Tolist();
然后在using外面return users。
------解决方案--------------------
C# code

public List<User> SelectByName(string name)
        {
            List<User> users = new List<User>();
            using (CleverTourEntities context = new CleverTourEntities())
            //CleverTourEntities context = new CleverTourEntities();
            {
                var user = from u in context.User
                           where u.Name == name
                           select u;
                //UserList =  user.ToList();
                users = user.ToList();
            }
            return users;

        }

------解决方案--------------------
如果问题依然没有解决 可以看下你的类里是否有导航属性

把导航属性 加上这个特性 JsonIgnore