Isk*_*yev 4 c# entity-framework-core
我面临以下领域模型
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; }
}
Run Code Online (Sandbox Code Playgroud)
这意味着,每笔交易都是 Client-to-Client 交易 OR CommssionFee 交易(委托给 Client-to-Client 交易之间的交易),它在 TransactionType 属性中描述,它是枚举类型。
示例:Bob 向 Alice 转账 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.???);
Run Code Online (Sandbox Code Playgroud)
Tan*_*jel 11
编写流畅的 API 配置如下:
builder.HasOne(tr => tr.CommissionTransactionForRealTransaction)
.WithOne().HasForeignKey<Transaction>(tr => tr.CommissionTransactionForRealTransactionId)
.IsRequired(false);
Run Code Online (Sandbox Code Playgroud)
它应该适合你。
| 归档时间: |
|
| 查看次数: |
1618 次 |
| 最近记录: |