1

编辑:得到它的排序,表有没有被解决的外键。Stackoverflow 不会让我在这么接近问这个问题的时候发布答案

我正在制作一个从 Windows Azure 上保存的数据库中获取信息的 Windows Phone 应用程序,我正在使用 WCF 连接来执行此操作。

但是当我调试并在本地调用该服务时,我收到以下错误:

ObjectContext 实例已被释放,不能再用于需要连接的操作。

我正在使用从http://mobile.dzone.com/news/how-use-wcf-services-access-0(登录用户部分)改编的代码 该站点的代码工作正常,但是,就像我说的,我的导致该错误。

这是我的代码:

    public Product GetProduct(String Barcode)
    {
        string query = @"SELECT value Product FROM AzureDBEntities.Products AS Product WHERE Product.barcode = @Barcode";
        ObjectParameter parameter = new ObjectParameter("Barcode", Barcode);

        using (var context = new AzureDBEntities())
        {
            ObjectQuery<Product> results = context.CreateQuery<Product>(query, parameter);

            foreach (Product result in results)
            {
                if (result != null)
                {
                    return result;
                }
            }
        }
        return null;
    }

任何想法我做错了什么?非常感谢。

4

2 回答 2

2

通过它的 detach 方法将实体传递给您的 ObjectContext 的实例。这将破坏您的可导航集合,但您不必关闭延迟加载。

public Product GetProduct(String Barcode)
{
    string query = @"SELECT value Product FROM AzureDBEntities.Products AS Product WHERE Product.barcode = @Barcode";
    ObjectParameter parameter = new ObjectParameter("Barcode", Barcode);

    using (var context = new AzureDBEntities())
    {
        ObjectQuery<Product> results = context.CreateQuery<Product>(query, parameter);

        foreach (Product result in results)
        {
            if (result != null)
            {
                context.Detach(result);
                return result;
            }
        }
    }
    return null;
}
于 2012-12-21T22:23:30.503 回答
1

在对您的答案的评论中,您声明错误是由以下原因引起的:WCFServiceWebRole1.dll!WCFServiceWebRole1.Product.Producer1.get()

这表明某些东西正在尝试访问您的 Product 实体上的 Producer 属性(可能是由 WCF 序列化引起的)。您可以尝试在您的上下文中关闭延迟加载和代理创建吗?

using (var context = new MyEntities())
{
    context.ContextOptions.LazyLoadingEnabled = false;
    context.ContextOptions.ProxyCreationEnabled = false;
}
于 2012-04-22T18:18:48.003 回答