NHibernate与petapoco加载机制

时间:2012-04-19 06:11:42

标签: nhibernate petapoco

我很难理解NHibernate的petapoco加载机制。实际上我做了一个测试来比较两者在查询中的行为方式。

我的课程如下:

UserTest.cs具有以下属性:

private string name;
private int id;
private int customerId;

public int ID
{
    get { return id; }
    set { id = value; }
}

public string Name
{
    get { return name; }
    set { name = value; }
}

public int? CustomerID
{
    get { return customerId; }
    set
    {
        if (value != customerId)
        {
            customerId = value;
            if (this.ID > 0)
            {
                DoSomeOtherWork();
            }
        }
    }
}

当我在NHibernate中执行User.Load时,我发现DoSomeOtherWork从未被调用过,而在PetaPoco中,我在加载User时执行查询,例如Connection.db.Fetch<UserTest>(...)Connection.db.Query<UserTest>(...),我可以看到DoSomeOtherWork被调用。

为什么会这样?

有没有办法避免在使用PetaPoco时调用DoSomeOherWork,使其与NHibernate具有相同的行为?我不是t want to use PetaPoco.Ignore as I need to get and set the CustomerID`。

1 个答案:

答案 0 :(得分:2)

PetaPoco它是一个微型ORM(比Nhibernate轻得多),并在您获取记录时实现您的POCO对象。没有其他魔法,所以答案是:

不,你不能避免调用属性的setter。