我可以在Web服务中使用已编译的查询吗?

时间:2012-11-16 02:14:31

标签: c# wcf linq-to-sql

我有一个WCF服务,其select方法只需要一个id。我需要使用几个(20+)加载选项来获取我需要返回的所有内容,所以我认为这会产生一个相当复杂的查询并编译它将是一个好主意。到目前为止,我找到的唯一方法是创建静态数据上下文和加载选项以与编译的查询一起使用。如果我不这样做,它会抱怨使用与编译时不同的上下文。这样我的问题应该这样做吗?在Web服务上使用静态数据上下文会导致问题吗?它只会用于此方法。所有其他方法创建自己的方法。我只是害怕我可能会在路上为这个决定买单,所以任何提示都会很棒!谢谢!

    private static DataLoadOptions loadOptions = GetDataLoadOpt();

    private static readonly Func<ItemsDataContext, int, Data.Item> SelectItem =
        CompiledQuery.Compile((ItemsDataContext DataContext, int ItemId) =>
            DataContext.Items.Where(r => r.ItemID == ItemId).FirstOrDefault());

    private static DataLoadOptions GetDataLoadOpt()
    {
        var loadOpts = new System.Data.Linq.DataLoadOptions();
        loadOpts.LoadWith<Data.Item>(d => d.ItemProp);
        .
        .
        .
        return loadOpts;
    }

1 个答案:

答案 0 :(得分:0)

Web服务调用是截然不同的。我没有发现拥有共享的静态上下文可以节省任何时间,因为无论如何调用最终都会启动新的实例。在我的一些项目中,我还有几个具有非常大,复杂的loadoptions堆栈的对象。在某些情况下,我有一点性能下降,因为我带回了这么多表,但如果连接很强(设计良好的数据库),那么它也不会太糟糕。

相关问题