Факультативные самореферентные отношения один-к-одному - PullRequest
0 голосов
/ 02 февраля 2019

Я сталкивался со следующей моделью домена

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.???);

1 Ответ

0 голосов
/ 02 февраля 2019

Напишите свою свободную конфигурацию API следующим образом:

builder.HasOne(tr => tr.CommissionTransactionForRealTransaction)
       .WithOne().HasForeignKey<Transaction>(tr => tr.CommissionTransactionForRealTransactionId)
       .IsRequired(false);

Это должно работать для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...