无法在WCF服务中加载相关实体

时间:2013-01-22 14:59:51

标签: c# wcf entity-framework

我正在使用Entity framework 4.1。我需要创建一个需要从现有数据库中提取的WCF服务。我正在使用wsHttp绑定。我已经使用了DbContext生成器和WCF支持。以下是已生成的两个类:

[DataContract(IsReference = true)]
[KnownType(typeof(TestSummary))]
public partial class Test
{
    [DataMember]
    public int Id { get; private set; }

    [DataMember]
    public virtual TestSummary TestSummary { get; set; }
}

[DataContract(IsReference = true)]
[KnownType(typeof(Test))]
public partial class TestSummary
{
    [DataMember]
    public int Id { get; private set; }
    [DataMember]
    public string Summary { get; set; }

    [DataMember]
    public virtual Test Test { get; set; }
}

当我获取所有Test对象时,我没有得到与之相关的TestSummary。我所有其他实体也是如此。代码用于获取Test实体:

List<Test> tests = new List<Test>();
using (TestModelContainer context = new TestModelContainer())
{
    var query = (from t in context.Tests select t);

    foreach (var t in query)
    {
        Test test = (Test)t;
        tests.Add(test);
    }
}

但是,当我使用没有WCF支持的DbContext生成器生成类时,还会加载所有相关实体(我使用控制台应用程序对其进行了测试)。

1 个答案:

答案 0 :(得分:2)

在您的查询中,您没有获取相关的TestSummary实体。您需要明确声明要通过向查询添加Include语句来获取相关的TestSummaries。

var query = (from t in context.Tests.Include("TestSummary") select t);

此外,无需创建List<Test> tests;您可以只返回从查询中获取的内容;

using (TestModelContainer context = new TestModelContainer())
{
    var query = (from t in context.Tests select t);
    return query.ToList();
}