Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在带有数据注释的实体框架中检索外键关系中的列子集_C#_Entity Framework - Fatal编程技术网

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它有什么不雅之处?这样做是一种已知的模式。当然,但我必须在检索这些数据的每个地方指定它,而不是在我的模型中一次性指定。答案是:不。但这太短了,不能作为真正的答案发布。