Я сталкивался со следующей моделью домена
public class Transaction
{
public Guid Id { get; set; }
public decimal TransactionSum { get; set; }
public decimal TransactionCurrencyConversionRatio { get; set; }
public bool IsTransactionApprovedBySystem { get; set; }
public bool IsTransactionApprovedBySender { get; set; }
public DateTime TransactionInitiatedDate { get; set; }
public DateTime ? TransactionApprovedDate { get; set; }
public TransactionType TransactionType { get; set; }
public Account SenderAccount { get; set; }
public Account ReceiverAccount { get; set; }
public Guid SenderAccountId { get; set; }
public Guid ReceiverAccountId { get; set; }
public Transaction CommissionTransactionForRealTransaction { get; set; }
public Guid ? CommissionTransactionForRealTransactionId { get; set; }
}
Это означает, что каждая транзакция является транзакцией клиент-клиент ИЛИ транзакция CommssionFee (фиксация транзакции между транзакцией клиент-клиент), как описано вСвойство TransactionType, тип enum.
Пример: Боб переводит Алисе 100 $, системная плата 1 $ за эту услугу передачи, поэтому для этой операции добавлено 2 строки:
Транзакция # XXX1 -100 $ и имеет тип Client-To-Client, а свойство CommissionTransactionForRealTransaction имеет значение NULL, поэтому атрибут CommissionTransactionForRealTransactionId в таблице имеет значение NULL.
Транзакция # XXX2 - 1 $, и она имела тип CommissionFee, а свойство CommissionTransactionForRealTransaction ссылается на другой объект, в то время как CommissionTransactionForRealTransactionId в таблице имеет некоторый внешний ключ.
Я читаю документацию и примеры в MSDN на EFОсновной раздел отношений, но не знаю, как реализовать 0 ... 1 к 1 самореференцииЯ начал с этого кода:
builder.HasOne(p => p.CommissionTransactionForRealTransaction)
.WithOne(p => p.???);