如何在带有EF的ASP.NET Core中基于两个键获取Enity?

时间:2018-07-19 10:05:00

标签: c# entity-framework asp.net-core .net-core

研究C标签标签程序员。

所以...我有一个奇怪的问题,我什至不知道如何恰当地描述它。让我们开始吧。

我有自己的 Unit 模型:

public class Unit {
  public int UnitID { get; set; }

  public string Name { get; set; }

  public int Version { get; set; }
}

看起来很简单,但是出于各种原因, UnitID 版本是我的主键。当您编辑单位时,它只会创建具有相同 UnitID 的新版本,但会增加 Version 。例如:

+--------+---------+---------+
| UnitID |  Name   | Version |
+--------+---------+---------+
|      1 | Unit1   |       1 |
|      1 | Unit1   |       2 |
+--------+---------+---------+

现在是我的模型,它使用 Unit 类:

public class WorkerUnit {

  public int WorkerID { get; set; }      

  public string Worker { get; set; }

  public int UnitID { get; set; }

  public Unit Unit { get; set; }
}

当我要求工人提供其单位时,我想获得最新版本的单位。像这样的东西。

 _context.Workers.SingleOrDefault(w => w.WorkerID == 1).Unit;

我该如何解决?也许我应该在 Unit 模型中添加一些方法,该方法会返回最新的 Unit 。喜欢:

public Unit GetNewestUnitWithThisID() { }

1 个答案:

答案 0 :(得分:2)

您的模型不满足您想要实现的目标。目前,仅使用Unit导航属性无法为工作人员获得单个单位。您需要将其完全删除,但保留UnitID。现在要获取单元,您需要最大版本号,最简单的方法是订购结果并获取第一个。例如,使用查询语法是因为我发现它使联接看起来更简单:

var query = from unit in _context.Units
            join worker in _context.Workers on unit.UnitID equals worked.UnitID
            orderby unit.Version descending
            select unit;

var unit = query.FirstOrDefault();