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