Управление таблицей соединений в замке ActiveRecord вручную - PullRequest
0 голосов
/ 20 октября 2010

У меня есть два связанных класса, определенных следующим образом:

    [ActiveRecord]
    public class Store : ActiveRecordBase<Store> {
        [PrimaryKey]
        public int ID { get; set; }

        [HasAndBelongsToMany(Table = "StoreCustJoin",
                             ColumnKey = "storeID",
                             ColumnRef = "customerID")]
        public IList<Customer> customers { get; set; }
    }

    [ActiveRecord]
    public class Customer : ActiveRecordBase<Customer> {
        [PrimaryKey]
        public int ID { get; set; }

        [HasAndBelongsToMany(Table = "Join",
                             ColumnKey = "customerID",
                             ColumnRef = "storeID",
                             inverse = true)]
        public IList<Store> stores { get; set; }
    }

    [ActiveRecord]
    public class Join : ActiveRecordBase<Join> {
        [PrimaryKey]
        public int ID { get; set; }

        [BelongsTo("storeID")]
        public Store store { get; set; }

        [BelongsTo("customerID")]
        public Customer customer { get; set; }

        [Property]
        public int Status { get; set; }
    }

Когда я подключаю Магазин к Клиенту, мне также необходимо установить статус.Поэтому я попытался сделать это:

    public void SetLink(Store theStore, Customer theCustomer, int status) {
        var link = new Join()
                       {
                           Status = status,
                           store = theStore,
                           customer = theCustomer
                       };
        theStore.customers.Add(theCustomer);
        theCustomer.stores.Add(theStore);
    }

Это создает две записи в ABJoin, первая с установленным статусом, вторая без.Если я не добавляю объекты в соответствующие списки, это работает.Но тогда ссылка не будет отражена в этих объектах, пока текущий сеанс не будет закрыт и экземпляр не будет повторно загружен из БД.также сохранить текущие объекты действительными и актуальными?

1 Ответ

1 голос
/ 20 октября 2010

Когда ваша таблица отношений (в вашем случае таблица «Соединение») имеет дополнительные поля, отличные от FK, к таблицам, к которым она относится, используйте [HasMany] вместо [HasAndBelongsToMany], то есть:

[ActiveRecord]
public class Store : ActiveRecordBase<Store> {
    [PrimaryKey]
    public int ID { get; set; }

    [HasMany]
    public IList<Join> customers { get; set; }
}

[ActiveRecord]
public class Customer : ActiveRecordBase<Customer> {
    [PrimaryKey]
    public int ID { get; set; }

    [HasMany]
    public IList<Join> stores { get; set; }
}

Подобные вопросы:

...