[英]How to get specific columns from different tables ASP.NET Core and Entity Framework Core
[英]How to get ValidFrom and ValidTo columns from temporal tables in Entity Framework Core?
有没有办法在 C# 的 EFCore 中访问时态表中的 ValidFrom 和 ValidTo 列?
这就是我初始化临时表的方式
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Product>().ToTable("Orders", options =>
{
options.IsTemporal();
});
}
但是当使用这样的查询时,我似乎无法访问 ValidFrom 和 ValidTo 列:
var history = context.Orders
.TemporalAll()
.Where(q => q.Id == orderId);
foreach (var item in history)
Console.WriteLine($"{item.ValidFrom}{item.Name}");
在这一行Console.WriteLine($"{item.ValidFrom}{item.Name}");
这部分行item.ValidFrom
显示一个错误,指出 ValidFrom 不是存在的列。
我知道这些列存在,只是它们被隐藏了。
我将在我的代码中经常使用 ValidFrom 和 ValidTo,如果它们不会被隐藏,我更喜欢它们。 有没有办法这样做?
如果我创建一个具有 ValidFrom 和 ValidTo 属性的接口,就像 EFCore 临时表自动创建的接口一样,并让我的对象继承自它,这是否是一个好的解决方案?
ValidFrom
和ValidTo
列不是模型的一部分,它们仅可用作影子属性,因此如果您想读取它们,则需要使用匿名类型,或者更好的是使用不同的模型类。 您可以Select
进入该类并使用EF.Property
读取值。 例如,有一个如下所示的新类:
public class OrderHistory : Order // Inherit all values from the standard Order entity
{
// I have a feeling these should actually be called PeriodStart and PeriodEnd...
public DateTime ValidFrom { get; set; }
public DateTime ValidTo { get; set; }
}
现在您可以编写如下查询:
var history = context.Orders
.TemporalAll()
.Where(o => o.Id == orderId)
.Select(o => new OrderHistory
{
Id = o.Id,
Name = o.Name,
// Other Order properties
ValidFrom = EF.Property<DateTime>(o, "ValidFrom"),
ValidTo = EF.Property<DateTime>(o, "ValidTo")
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.