最大相关记录数

时间:2013-01-30 16:01:40

标签: entity-framework

有没有办法指定实体允许的最大相关记录数?例如,对于每个Order实体,我想指定一个约束,它最多有五个orderItems。

我是否必须使用sql或者流畅的api或ef属性中有什么可以帮助?

2 个答案:

答案 0 :(得分:3)

我认为“每个订单最多五个orderItem”是业务要求。这些要求不应该通过基础设施(映射)或sql来实现(虽然我不确定你的意思,我把它读作数据库逻辑)。导致验证的属性可能没问题,但我认为没有任何属性。

您应该以与所有其他业务规则类似的验证和反馈方式实施它。在映射中实现的规则(如果可能的话)或数据库约束将需要第二个验证机制,可能会捕获异常,这很难看。

除此之外,这条规则可能会改变一天,甚至可能暂时改变(圣诞节?)。然后,您不希望将此规则的实现分散在各种应用程序层上。

我会在服务类或存储库或Order类本身的某个AddItem方法中实现该规则,并使其最大可配置。

答案 1 :(得分:1)

我会像这里所做的那样接近这个:

Limit size of Queue<T> in .NET?

另外:How do I override List<T>'s Add method in C#?

通过覆盖处理返回实体列表的任何内容来处理此问题,这些实体具有实现业务逻辑要求的扩展类型。如果您希望将来更改它,也可以轻松地从设置文件中控制属性。

我知道无法在EF / Fluent或SQL中执行此操作,这似乎与直觉相反,因为这是相关的业务逻辑,与您如何持久保存数据无关。 (*不是说没有我不知道的方式)

这样的事情应该有效:

public class LimitedList<T> : List<T> {
  private int limit = -1;

  public int Limit {
    get { return limit; }
    set { limit = value; }
  }

  private List<T> list= new List<T>();
  public LimitedList(int Limit) {
     this.Limit=Limit;
  }

  public void Add(T entry) {
     if (this.Limit != list.Count) {
       list.Add(entry);
     } else {
         //error
     }
  }
}