Механизм загрузки NHibernate vs 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();
            }
        }
    }
}

Когда я делаю User.Load в NHibernate, я заметил, что DoSomeOtherWork никогда не вызывается, тогда как в PetaPoco, когда я делаю запрос из loading User, такой как Connection.db.Fetch<UserTest>(...) или Connection.db.Query<UserTest>(...), я вижу, что DoSomeOtherWork вызывается.

Почему это ну и что?

Есть ли способ избежать вызова DoSomeOherWork при использовании PetaPoco таким образом, что он имеет то же поведение, что и NHibernate? Я неt want to usePetaPoco.Игнорироватьas I need to get and set theCustomerID`.

1 2

1 ответ:

PetaPoco это микро-ОРМ (намного легче, чем Nhibernate) и материализует ваш объект POCO, когда вы получаете запись. Нет никакой другой магии, кроме этой, поэтому ответ таков:

Нет, вы не можете избежать вызова сеттера свойства.