2013-01-22 57 views
2

我正在使用實體框架4.1。我需要創建一個WCF服務,它需要從現有數據庫中提取。我正在使用wsHttp綁定。我使用了WCF支持的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; } 
} 

當我獲取所有測試對象,我沒有得到有關它的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發生器類,所有相關實體也加載(我有一個控制檯應用程序測試它)。

回答

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(); 
}