Linq2sql和WCF,可以访问表

时间:2009-12-09 21:48:24

标签: c# wcf linq-to-sql

使用linq2sql和wcf时遇到了一些困难 假设我有三个表:ReportsTasksTypesTasks个引用Reports(一个Report可以拥有无​​限数量的tasks),Reports个引用TypesReport属于某种类型,例如BugReport,ChangeRequest和类似的东西)。

现在我想通过WCF获取所有Reports。我写了GetAllReports()函数。获取与Reports(在这种情况下为Tasks)相关的数据当然存在问题。对于dataContext,LoadOptions就足够了 但现在我遇到了不同的问题:我也希望能够访问Types表,即当我有Report个对象时,我希望能够从行中获取Type名称或其他内容Report与...有关。在这种情况下,LoadOptions不起作用。

以下是获取所有报告的代码:

public ICollection<Database.Zgloszenia> GetAllReports()
    {
        using (var dataContext = new Database.ChangeSystemDataDataContext())
        {
            var loadOptions = new System.Data.Linq.DataLoadOptions();
            loadOptions.LoadWith<Database.Reports>(t => t.Tasks);
            loadOptions.LoadWith<Database.Reports>(t => t.Types);
            dataContext.LoadOptions = loadOptions;
            return dataContext.Reports.Select(r => r).ToList();
        }
    }

调试服务时,返回的值都可以 - 有对Tasks和Types表的引用。但是,在将对象传输到WCF客户端后,仅存在“任务”表,缺少“类型” 我注意到,现在只有表,引用查询的主表(在这种情况下报告;任务使用报告,因此它们存在),而不是主表使用的那个(在这种情况下类型;报告使用类型,类型不存在。)

这是无法更改的默认行为,还是有某种方法可以将类型行包含在查询结果中?

提前致谢
亚雷克

3 个答案:

答案 0 :(得分:0)

不完全回答您的问题,但您看过WCF Data Services吗?

答案 1 :(得分:0)

您是否已在LINQ to SQL设计器中将每个实体类的序列化模式设置为Unidirectional?

答案 2 :(得分:0)

我已将序列化模式设置为单向到整个dbml架构,我认为它将应用于架构中的所有实体。我认为,序列化实体运作良好 我会在家里再次检查一下。

我还看了一下Mike Chaliy提到的WCF数据服务,但我认为这不是我想要的。我正在做大学项目,我应该在WCF上使用Linq2Sql。

编辑:
我检查过,架构设置为unidirectional Serialization Mode,单个表没有序列化模式,所以我看起来一切都设置好了。