2

EntityFramework4.1を使用しています。既存のデータベースからのフェッチが必要なWCFサービスを作成する必要があります。wsHttpバインディングを使用しています。WCFをサポートするDbContextジェネレーターを使用しました。生成されたクラスの2つは次のとおりです。

[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ジェネレーターを使用してクラスを生成すると、関連するすべてのエンティティも読み込まれます(コンソールアプリケーションでテストしました)。

4

1 に答える 1

2

TestSummaryクエリでは、関連するエンティティをフェッチしていません。クエリにステートメントを追加して、関連するTestSummariesをフェッチすることを明示的に宣言する必要がありIncludeます。

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();
}
于 2013-01-22T15:02:36.093 に答える