使用linq2sql和wcf时遇到了一些困难
假设我有三个表:Reports
,Tasks
和Types
。 Tasks
个引用Reports
(一个Report
可以拥有无限数量的tasks
),Reports
个引用Types
(Report
属于某种类型,例如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客户端后,仅存在“任务”表,缺少“类型” 我注意到,现在只有表,引用查询的主表(在这种情况下报告;任务使用报告,因此它们存在),而不是主表使用的那个(在这种情况下类型;报告使用类型,类型不存在。)
这是无法更改的默认行为,还是有某种方法可以将类型行包含在查询结果中?
提前致谢
亚雷克
答案 0 :(得分:0)
不完全回答您的问题,但您看过WCF Data Services吗?
答案 1 :(得分:0)
您是否已在LINQ to SQL设计器中将每个实体类的序列化模式设置为Unidirectional?
答案 2 :(得分:0)
我已将序列化模式设置为单向到整个dbml架构,我认为它将应用于架构中的所有实体。我认为,序列化实体运作良好 我会在家里再次检查一下。
我还看了一下Mike Chaliy提到的WCF数据服务,但我认为这不是我想要的。我正在做大学项目,我应该在WCF上使用Linq2Sql。
编辑:
我检查过,架构设置为unidirectional
Serialization Mode
,单个表没有序列化模式,所以我看起来一切都设置好了。