我遇到了以下领域模型
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属性中描述,这是枚举类型。
示例:鲍勃向爱丽丝转移100美元,此转移服务向系统收取1美元,因此为此操作添加了2行:
事务#XXX1-100 $,其类型为Client-To-Client,其属性CommissionTransactionForRealTransaction为NULL,因此表中的CommissionTransactionForRealTransactionId属性设置为NULL。
交易#XXX2-1 $,其类型为CommissionFee,并且属性CommissionTransactionForRealTransaction引用了另一个对象,而表中的CommissionTransactionForRealTransactionId具有一些外键。
我在EF Core关系部分中阅读了MSDN中的文档和示例,但不知道如何实现0 ... 1对1自引用。我从以下代码开始:
builder.HasOne(p => p.CommissionTransactionForRealTransaction)
.WithOne(p => p.???);
答案 0 :(得分:3)
写您流利API配置如下:
builder.HasOne(tr => tr.CommissionTransactionForRealTransaction)
.WithOne().HasForeignKey<Transaction>(tr => tr.CommissionTransactionForRealTransactionId)
.IsRequired(false);
它应该为您工作。