我正在研究的域模型具有根聚合和子实体.类似下面的代码:
class Order { IListLines {get;set;} } class OrderLine { }
现在我希望我的订单控制线.像这样的东西:
class Order { OrderLine[] Lines {get;} void AddLine(OrderLine line); }
目前我们使用以下模式:
class Order { private IListlines = new List (); OrderLine[] Lines {get {return this.lines;}} void AddLine(OrderLine line) { this.orders.Add(line); { }
NHibernate直接映射到lines字段.
现在问题......
你在这种情况下练习什么?
有没有人使用方法:public IEnumerable GetLines()
您使用什么作为财产的返回类型?可能是ReadOnlyCollection或IEnumerable;
可能这不是最好问的地方吗?建议请.
更新:似乎IEnumerable获胜,但解决方案仍然不完美......
我是这样做的:
public class Order { private ISet_orderLines = new HashedSet (); public ReadOnlyCollection OrderLines { get { return new List (_orderLines).AsReadOnly(); } } public void AddOrderLine( OrderLine ol ) { ... } }
然后,在映射中,NHibernate被告知要使用_orderLines字段:
...
我使用的模式是:
class Order { private Listlines = new List (); IEnumerable Lines { get { return this.lines; } } void AddLine(OrderLine line) { this.orders.Add(line); } }
如果您使用的是.NET 3.5,则可以使用LINQ获得IEnumerable所需的所有搜索功能,并隐藏您的集合实现.
返回OrderLine []的问题是您的集合可以在外部修改,例如:
Order.Lines[0] = new OrderLine().