【问题标题】:Unable to load related entities in a WCF service无法在 WCF 服务中加载相关实体
【发布时间】:2013-01-22 14:59:51
【问题描述】:

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

[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。我的所有其他实体也是如此。用于获取测试实体的代码:

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 生成器生成类时,也会加载所有相关实体(我使用控制台应用程序对其进行了测试)。

【问题讨论】:

    标签: c# wcf entity-framework


    【解决方案1】:

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

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

    另外,不需要创建List&lt;Test&gt; tests;您可以只返回从查询中获取的内容;

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多