2011-02-18 45 views
1

我正要开始挖掘nHibernate,我希望你能在这里给我一点启发。这些在nhibernate工作?

我相信POCO必须有一个无参数的公共构造函数(?)。对于与儿童有关的收藏品,请使用IList(尽管我在一些示例中看过IBag)(?)

我也对我可以在对象上公开或拒绝的访问感兴趣。这里有一个例子:

public class Poco 
{ 
    private IList<ChildPoco> _childPocos; 

    //1) can use IEnumerable? Or have to use IList? Or third way? 
    public IEnumerable<ChildPoco> ChildPocosEnumerable 
    { 
     get { return _childPocos.AsEnumerable(); } 
    } 

} 

public class ChildPoco 
{ 
    private string _name; 
    public string Name 
    { 
     get { return _name; } 
     //2) protected/public/private set? 
    } 
} 

所以,上面可以看到// 1)// 2)你只是解释一下这里我的选择是NHibernate的支持?

有一点额外的信息,如果有帮助。 1)使用IEnumerable的愿望是使集合的公开面只读。

2)与名称一样。我希望它只能在这里阅读。

问题的原因是我现在已经有了建立一些pocos的设施,但是直到后来才能够开始使用nhibernate的东西,所以我试图提前一点计划。

谢谢。

回答

3

1)您可以使用的接口取决于集合类型。您可以使用IEnumerable<T>,ICollection<T>IList<T>

对于set,您可以使用IEnumerable<T>,ICollection<T>Iesi.Collections.Generic.ISet<T>

对于list您必须使用IList

现在,AsEnumerable是一个noop。如果你想阻止客户端代码修改集合,使用身份选择代替:

public IEnumerable<ChildPoco> ChildPocos 
{ 
    get { return _childPocos.Select(x => x); } 
} 

并绘制它,使用access="field.camelcase-underscore"。这将导致NHibernate的使用_childPocos领域ChildPocos persistence

2) setter方法可以有任何你想要的无障碍环境。并且您不需要使用背景字段:

public string Name { get; private set; } 
+0

您明星,谢谢。 – Ian 2011-02-18 15:44:26