C# 实体框架:排除导航属性
我使用的是EntityFramework6,我想检索一个具有多个导航属性的实体。我不想找回其中一个,我也没有找到一个方法来实现这一点 这是我的模型: 全尺寸图像: 我想检索会话实体的所有导航属性,讨论除外。 所以我做了:C# 实体框架:排除导航属性,c#,sql,asp.net,.net,entity-framework,C#,Sql,Asp.net,.net,Entity Framework,我使用的是EntityFramework6,我想检索一个具有多个导航属性的实体。我不想找回其中一个,我也没有找到一个方法来实现这一点 这是我的模型: 全尺寸图像: 我想检索会话实体的所有导航属性,讨论除外。 所以我做了: using (var context = new ModelContainer()) { context.Database.Log = msg => Trace.WriteLine(msg);
using (var context = new ModelContainer())
{
context.Database.Log = msg => Trace.WriteLine(msg);
var session = await
context.SessionSet.FirstOrDefaultAsync(a => a.Identifier == sessionIdentifier);
var result = await Json(session).ExecuteAsync(new CancellationToken());
return ResponseMessage(result);
}
但我希望实体框架能够提供一种排除实体字段的方法。我最终这样做了:
var session = await
context.SessionSet.Select(a => new
{
Host = a.Host,
Identifier = a.Identifier,
Destination = a.Destination,
Positions = a.Positions,
Sentinelles = a.Sentinelles,
Id = a.Id,
Code = a.Code,
Notifications = a.Notifications,
Status = a.Status,
Transportation = a.Transportation
}).FirstOrDefaultAsync(a => a.Identifier == sessionIdentifier);
var result = await Json(session).ExecuteAsync(new CancellationToken());
我真的不明白你的意思。默认情况下,EF将排除这些导航属性。顺便说一句,你想做什么?只需包含你需要的那些,其余的你就拿不到了。如果循环引用有问题,请使用DTO's@Rahul我想选择我的会话实体,但它附带了它的所有导航属性(包括我不想检索的讨论)。所以我想找到一种排除导航属性的方法。如果我执行context.SessionSet.FirstOrDefaultAsync(…),我的请求将选择所有内容。@bbouget Include用于听起来好像需要对不同类型的模型进行一些研究。您正在使用数据模型,但希望投影到DTO中,可能用作ViewModel。此外,还可以考虑使用AutoMapper帮助在不同型号之间进行转换。它使生活变得更加简单。这是对匿名DTO的投影。出于文档和互操作性的目的,您可能希望提取一个具体类型并映射到该类型。