Здравствуйте, Ночной Смотрящий, Вы писали:
НС>Здравствуйте, 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; }
}