EF关系缓慢变化维度

时间:2014-10-14 14:33:27

标签: c# .net entity-framework

我首先使用带有.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在关系表中翻译它,或者有一个数据注释或流畅的api。

提前致谢

1 个答案:

答案 0 :(得分:0)

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

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

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);
  }
}

然后在您的上下文中进行映射。

通过这种方式,您可以为有效日期时间添加额外的属性,而不是让EF生成没有它们的连接表。

如果您尝试在EF中设置关系时间范围(例如,当我将table_a中的记录链接到table_b中的记录时,则此关系有效2小时),然后是。这是您在代码中设置的业务规则。

修改

我添加了一种方法,用于添加创建关系时访问的有效时间范围。您仍然需要保存更改&amp;所有这一切,但这只是我如何做到这一点的一个例子。您可以将其设置为从&amp;和/或b班。