2

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

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

4

2 回答 2

3

我认为“每个订单最多五个 orderItems”是业务要求。此类要求不应由基础架构(映射)或 sql 实现(尽管我不确定您的意思是什么,我将其视为数据库逻辑)。导致验证的属性可能没问题,但我认为它没有任何属性。

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

除此之外,这条规则有一天可能会改变,甚至可能是暂时的(圣诞节?)。那么你不希望这个规则的实现分散在不同的应用层上。

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

于 2013-01-30T19:13:49.467 回答
1

我会像这里所做的那样处理这个:

.NET 中 Queue<T> 的限制大小?

另外:如何在 C# 中覆盖 List<T> 的 Add 方法?

通过使用扩展类型覆盖处理您的返回实体列表来处理此问题,该扩展类型实现您的业务逻辑要求。如果您想在将来更改它,这也将使从设置文件中控制属性变得容易。

我不知道在 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
     }
  }
}
于 2013-01-30T17:20:06.633 回答