繁体   English   中英

如何从 Entity Framework Core 的时态表中获取 ValidFrom 和 ValidTo 列?

[英]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 临时表自动创建的接口一样,并让我的对象继承自它,这是否是一个好的解决方案?

ValidFromValidTo列不是模型的一部分,它们仅可用作影子属性,因此如果您想读取它们,则需要使用匿名类型,或者更好的是使用不同的模型类。 您可以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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM