Замок ActiveRecord JoinedKey не установлен - PullRequest
1 голос
/ 24 июня 2010

Я использую «Наследование таблиц классов - Использование объединенных подклассов», как описано здесь: http://www.castleproject.org/activerecord/documentation/trunk/usersguide/typehierarchy.html

Оттуда частично скопирован следующий код.

[ActiveRecord("entity"), JoinedBase]
public class Entity : ActiveRecordBase
{
    ...
    private int id;

    [PrimaryKey]
    private int Id
    {
        get { return id; }
        set { id = value; }
    }
}

[ActiveRecord("entitycompany")]
public class CompanyEntity : Entity
{
    private int comp_id;

    [JoinedKey("comp_id")]
    public int CompId
    {
        get { return comp_id; }
        set { comp_id = value; }
    }
    ....
}

Теперь, когда у меня естьCompanyEntity загружен и имеет доступ к свойству ComId, оно всегда равно 0, но унаследованное свойство Id содержит правильное значение.

Edit:

Я, вероятно, должен добавить, что наши сущностиавтоматически генерируются и я не хочу трогать генератор.

Edit2:

Хорошо, я понимаю, что мне нужно прикоснуться к генератору, чтобы он заработал.Но все же, почему Active Record не устанавливает Comp_id?

Вопрос:

Как я могу сказать ActiveRecord также установить значение JoinedKey в дочернем классе, чтобыэтот CompId == Id?

Ответы [ 2 ]

0 голосов
/ 28 апреля 2014

Это довольно старый вопрос, но я столкнулся с той же проблемой.Пример на странице Castle.ActiveRecord неверен.

Вы можете решить проблему следующим образом (пример кода с прокомментированными изменениями):

[ActiveRecord("entity"), JoinedBase]
public class Entity : ActiveRecordBase
{
    ...
    protected int id; // use protected instead of private

    [PrimaryKey]
    private int Id
    {
        get { return id; }
        set { id = value; }
    }
}

[ActiveRecord("entitycompany")]
public class CompanyEntity : Entity
{
    // private int comp_id; // this member variable is not required

    [JoinedKey("comp_id")]
    public int CompId
    {
        get { return id; } // access the member variable of the base class
        set { id = value; } // access the member variable of the base class
    }
    ....
}

Я только что успешно протестировал егомоя иерархия типов.

0 голосов
/ 20 апреля 2011

Я думаю, вам нужно использовать:

[JoinedKey("comp_id")]
public override int Id { get { return base.Id; } }

... и приведенный ими пример неверен.

...