2

我很难理解 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();
            }
        }
    }
}

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

为什么呢?

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

4

1 回答 1

3

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

不,你不能避免调用属性的设置器。

于 2012-04-19T14:28:37.843 回答