EF与缓慢变化维度的关系

本文关键字:关系 变化 缓慢 EF | 更新日期: 2023-09-27 18:26:25

我首先使用带有.net 4.5.1和EF 6代码的C#。

有没有一种方法可以用有效期的时间范围来标记关系?在SQL DDL方面,我定义如下:

create table a_b_relationship (
  table_a_id int,
  table_b_id int,
  valid_from datetime,
  valid_to datetime
)

我想知道我是否应该将关系本身定义为一个类,以便EF在关系表中转换它,或者有一个数据注释或fluent api。

提前感谢

EF与缓慢变化维度的关系

如果我正确理解您的问题,您希望在创建的表中添加属性,以支持到表之间的多对多关系。

我会创建一个单独的类来支持这一点。

public class a_b_relationship 
{
  public a_b_relationship_id(table_a a, table_b b)
  {
    table_a = a;
    table_b = b;
    ValidTime(20);
  }
  public int a_b_relationship_id { get; set; }
  public int table_a_id { get; set; }
  public int table_b_id { get; set; }
  public DateTime valid_from { get; set; }
  public DateTime valid_to { get; set; }
  public virtual IEnumerable<table_a> table_as { get; set; }
  public virtual IEnumerable<table_b> table_bs { get; set; }

  private void ValidTime(int validMinutes)
  {
    valid_from = DateTime.Now();
    valid_to = DateTime.Now().AddMinutes(validMinutes);
  }
}

然后将其映射到您的上下文中。

通过这种方式,您可以为有效性DateTimes添加额外的属性,而不是让EF在没有它们的情况下生成联接表。

如果您试图在EF中设置关系时间范围(例如,当我将表a中的记录链接到表b中的记录时,则此关系有效期为2小时),则不。这是您在代码中设置的业务规则。

编辑

我添加了一个方法,用于添加创建关系时访问的有效期时间范围。您仍然需要保存更改&所有这些,但这只是我如何做的一个例子;b类。