阻止LINQ to SQL返回子对象

时间:2014-08-14 18:25:13

标签: sql linq

我是一个LINQ to SQL新手。我有一个带有两个表的简单数据库。活动和问题。问题表有一个EventId列,它是Events表中的外键。

我的查询如下:

var questions = db.Questions.Where(u => u.EventId == 1);

生成的对象如下所示:

[{
    "QuestionId": 1,
    "Text": "",
    "EventId": 1,
    "Event": {
      "EventId": 1,
      "Title": "Event Name",
            "Questions": [ {
            "QuestionId": 1,
            "Text": "",
            "EventId": 1 } ]
     }
}]

LINQ to SQL似乎是自动添加相关事件,并且还将相关问题再次添加到事件中。我不得不告诉JSON.Net忽略递归引用,以便它可以工作,但我觉得我的查询是正确的,或者我没有正确配置数据库的东西。

虽然可能会出现相关对象数据很酷的情况,但我并不需要这样做。我如何调整事情,以便我得到问题,如下:

[{
    "QuestionId": 1,
    "Text": "",
    "EventId": 1,
}]

谢谢!

1 个答案:

答案 0 :(得分:2)

我认为问题是Json.Net在您打开数据库上下文时会浏览您的对象(包括虚拟导航属性),导致它延迟加载引用。

一个简单的解决方法是在序列化结果之前处理数据库上下文或分离对象。

另一种解决方法是使用select创建一个新的分离对象。

var questions = db.Questions.Where(u => u.EventId == 1).Select(u => new
    {
     QuestionId: u.QuestionId,
     Text: u.Text,
     EventId: u.EventId,
    });