Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 一对一可选自引用关系_C#_Entity Framework Core - Fatal编程技术网

C# 一对一可选自引用关系

C# 一对一可选自引用关系,c#,entity-framework-core,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 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; }
}
这意味着,每个交易都是客户对客户交易或佣金交易(客户对客户交易之间的交易佣金),它在TransactionType属性中描述,即枚举类型

示例:Bob向Alice转账100美元,此转账服务的系统费用为1美元,因此为此操作添加了两行:

事务#XXX1-100$,并且它的类型为Client-To-Client,并且属性CommissionTransactionForRealTransaction为NULL,因此表中的CommissionTransactionForRealTransactionId属性设置为NULL

Transaction#XXX2-1$,其类型为CommissionFee,property CommissionTransactionForRealTransaction正在引用另一个对象,而表中的CommissionTransactionForRealTransactionId有一些外键

我阅读了MSDN中关于EF核心关系部分的文档和示例,但不知道如何实现0…1对1自引用。我从以下代码开始:

builder.HasOne(p => p.CommissionTransactionForRealTransaction)
    .WithOne(p => p.???);

编写fluent API配置,如下所示:

builder.HasOne(tr => tr.CommissionTransactionForRealTransaction)
       .WithOne().HasForeignKey<Transaction>(tr => tr.CommissionTransactionForRealTransactionId)
       .IsRequired(false);
builder.HasOne(tr=>tr.CommissionTransactionForRealTransaction)
.WithOne().HasForeignKey(tr=>tr.CommissionTransactionForRealTransactionId)
.i被要求(虚假);

它应该适合您。

您不需要手动配置。EF是否已理解
Guid?CommissionTransactionForRealTransactionId
Transaction CommissionTransactionForRealTransaction
@Camiloterevento约定优于配置在这里不起作用,因为虽然EC核心通常会将这些标识为参考和FK属性,但传统关系是一对多/而OP需要一对一,因此,手动配置是绝对必要的。(1)“按如下方式编写fluent API配置”为什么?(2) “它应该为你工作”应该或将工作?
“它应该为你工作”应该或将工作?
-将工作!我已经在我这边生成了。那么
应该
威尔
之间有什么区别呢?他们都在证明答案是发问者想要的。嘿@Tanvir,正如你所看到的,我只是在评论以帮助你改进答案。否则,我可以简单地DV,不做任何解释:)映射FK不是这个问题/问题的一部分,所以有这个问题的人不太可能得出这个问题/答案。无论如何,你正在进步——至少这次你没有改变OP模式:)谁知道,也许下次你不会包括多余的东西:)干杯。