Re[12]: Неявные внешние ключи
От: Naf2000  
Дата: 01.10.21 14:28
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Здравствуйте, Naf2000, Вы писали:


N>>1. Зачем иметь PartnerID как отдельное свойство, если сам Partner содержит эти данные в ID?


НС>С точки зрения реляционной модели это разные вещи. Ну и философия linq2db — не маскировать природу данных. Поэтому идея прятать реально существующее поле — так себе.


N>>2. PartnerID низкоуровневый термин (попросту число) чем Partner.


НС>Да. В этом суть l2db — lightweight ORM. Если подход не устраивает — лучше выбрать другой инструмент, более тяжеловесный.


N>>3. Может произойти коллизия не консистентности, когда PartnerID!=Partner.ID


НС>Не может, если сделать свойство Partner readonly и выбрасывать исключение при попытке к нему обратиться.


И все таки удалось:

    [Table("Partners")]
    public class Partner
    {
        [PrimaryKey, Identity]
        public long ID { get; set; }
        [Column]
        public string Name { get; set; }
    }

    [Table("Orders")]
    [Column(Name="Partner",MemberName="Partner.ID")]
    public class Order
    {
        [PrimaryKey, Identity]
        public long ID { get; set; }
        [Column]
        public string Number { get; set; }
        private static Expression<Func<Order, IDataContext, IQueryable<Partner>>> PartnerImpl => (_, db) => db.GetTable<Partner>().Where(s => s.ID == _.Partner.ID);
        [Association(QueryExpressionMethod = nameof(Order.PartnerImpl))]
        public Partner Partner { get; set; }
    }
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.