gpt4 book ai didi

nhibernate - 将 HasMany 和 ManyToMany 关系公开为 IEnumerable

转载 作者:行者123 更新时间:2023-12-03 12:58:27 24 4
gpt4 key购买 nike

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

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

示例:

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. 私有(private)支持字段是一个很好的解决方案。
  3. 是的,但请记住,如果您想要对公开的集合进行真正的只读访问,请使用 ReadOnlyCollection - http://msdn.microsoft.com/en-us/library/ms132474.aspx

关于nhibernate - 将 HasMany 和 ManyToMany 关系公开为 IEnumerable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5749356/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com