将 HasMany 和 ManyToMany 关系公开为 IEnumerable

2024-03-05

目前,在我的实体中,我将集合公开为 IList,但我一直在考虑将它们公开为 IEnumerable,以防止用户手动添加到集合中。我为这些操作添加了特定的内容,以便我可以确保我的双向关系保持完整。在这种情况下,我想到了几个问题。

  1. 如果我将它们公开为 IEnumerable 是否意味着我需要为每个代表实体中关系的集合提供一个 Add 和 Remove 方法?
  2. 有没有更简单的方法来做到这一点?我并不反对这样做,只是想知道。
  3. 你是这样做的吗?

Example:

public class OrderHeader
{
    public virtual Guid OrderId { get; private set; }

    public virtual IList<OrderLine> OrderLines { get; set; }

    public virtual void AddLine(OrderLine orderLine)
    {
        orderLine.Order = this;
        OrderLines.Add(orderLine);
    }

    //No need for a remove method since we expose collection as IList
}

转换上面的类以便我们只公开 IEnumerable 将导致:

public class OrderHeader
{
    public virtual Guid OrderId { get; private set; }

    private IList<OrderLine> orderLines { get; set; }
    public IEnumerable<OrderLine> OrderLines { get { return orderLines; } }

    public virtual void AddLine(OrderLine orderLine)
    {
        orderLine.Order = this;
        orderLines.Add(orderLine);
    }

    public virtual void RemoveLine(OrderLine orderLine)
    {
        orderLines.Remove(orderLine);
    }
}

  1. 是的,如果您公开 IEnumerable,最好在类上添加方法来处理添加/删除
  2. 私人支持领域是一个非常好的解决方案。
  3. 是的,但请记住,如果您想真正只读访问公开的集合,请使用 ReadOnlyCollection -http://msdn.microsoft.com/en-us/library/ms132474.aspx http://msdn.microsoft.com/en-us/library/ms132474.aspx
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 HasMany 和 ManyToMany 关系公开为 IEnumerable 的相关文章

随机推荐