C# 如何在带有数据注释的实体框架中检索外键关系中的列子集
假设我有一个普通的外键列,如下所示:C# 如何在带有数据注释的实体框架中检索外键关系中的列子集,c#,entity-framework,C#,Entity Framework,假设我有一个普通的外键列,如下所示: [Table("Thing")] public class Thing { [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public Guid? Id { get; set; } public Guid? StatusId { get; set; } // want to omit this potentially large object
[Table("Thing")]
public class Thing
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid? Id { get; set; }
public Guid? StatusId { get; set; }
// want to omit this potentially large object
[ForeignKey("StatusId")]
public ThingStatus Status { get; set; }
// This column isn't in the Thing table; how to best populate it from ThingStatus?
public string StatusName { get; set; }
...
}
[Table("ThingStatus")]
public class ThingStatus {...}
现在让我们假设ThingStatus有很多列,比我想要的多。是否有一种巧妙的方法通过模型注释仅检索一些值?有没有办法告诉EF只检索ThingStatus.Name作为我的属性StatusName,而不是ThingStatus的导航属性
假设没有,有没有比通过从ThingStatus检索更优雅的方法。选择并在代码中映射它?您可以通过选择对象来实现所需的效果。EF将只返回您告诉它选择的内容
var results = myContext.Things
.Select(x => new ThingViewModel()
{
StatusName = x.ThingStatus.Name
})
.ToList();
当然,这个选择似乎没有我想象的那么优雅。我很好奇是否有办法通过我的模型类中的数据注释来实现这一点。@PatrickSzalapski它有什么不雅之处?这样做是一种已知的模式。当然,但我必须在检索这些数据的每个地方指定它,而不是在我的模型中一次性指定。答案是:不。但这太短了,不能作为真正的答案发布。