所以我在 linq-to-sql dbml 文件中有几个表:
我已经为用户设置了一个 WCF REST 获取端点。我无法让它传回这样的 JSON:
{
ID: '123',
Username: 'fdsaf',
...
Role:
{
ID: '123',
...
}
}
如果我将 DBML 序列化模式从“无”设置为“单向”,我可以获得没有角色的用户对象。如果我将序列化模式保留为 none 并删除关联,我还可以获得用户对象。作为健全性检查,我也可以在没有用户的情况下获得角色。一旦我尝试包含引用,它就会尝试序列化两次(在调试器中),并且在客户端上似乎成功调用函数后出现以下错误:
此外,如果我打开关联并将子属性访问权限设置为内部,我可以获得我正在寻找的内容。但是,有时我会希望将角色与用户集合一起传回,所以这还不够。
我包含这条信息是因为它似乎表明序列化程序正在尝试序列化 User > Role > User > Role ... 等,这显然是不够的。但是在循环和零级深度参考之间必须有一个中间地带。
下面的代码:
using (DataContext context = new DataContext())
{
DataLoadOptions opts = new DataLoadOptions();
opts.LoadWith<User>(u => u.Role);
context.LoadOptions = opts;
return context.Users
.Where(u => u.ID == id)
.Where(u => u.Hash == hash)
.FirstOrDefault();
}