我首先使用带有.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。
提前感谢
如果我正确理解您的问题,您希望在创建的表中添加属性,以支持到表之间的多对多关系。
我会创建一个单独的类来支持这一点。
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类。