Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.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# 备用关键点上的EF Core FK约束_C#_Asp.net Core_Entity Framework Core_Ef Fluent Api - Fatal编程技术网

C# 备用关键点上的EF Core FK约束

C# 备用关键点上的EF Core FK约束,c#,asp.net-core,entity-framework-core,ef-fluent-api,C#,Asp.net Core,Entity Framework Core,Ef Fluent Api,嗨,我有一个实体如下 public class SalaryTransactionAudit { public long SalaryTransactionAuditId { get; set; } public Guid TransactionBatchId { get; set; } public DateTime UploadedDate { get; set; } public string UploadedBy { get; set; }

嗨,我有一个实体如下

public class SalaryTransactionAudit
{
      public long SalaryTransactionAuditId { get; set; }
      public Guid TransactionBatchId { get; set; }
      public DateTime UploadedDate { get; set; }
      public string UploadedBy { get; set; }
      public long SalaryTransactionStatusId { get; set; }
}
public class SalaryTransactionAuditConfiguration : IEntityTypeConfiguration<SalaryTransactionAudit>
{
        public void Configure(EntityTypeBuilder<SalaryTransactionAudit> builder)
        {
            builder.ToTable("SalaryTransactionAudit");
            builder.HasKey(e => e.SalaryTransactionAuditId);
            builder.HasAlternateKey(e => e.TransactionBatchId);
        }
 }
上述实体在SalaryTransactionAuditId上有主键,在TransactionBatchId上有备用键,如下所示

public class SalaryTransactionAuditConfiguration : IEntityTypeConfiguration<SalaryTransactionAudit>
{
        public void Configure(EntityTypeBuilder<SalaryTransactionAudit> builder)
        {
            builder.ToTable("SalaryTransactionAudit");
            builder.HasKey(e => e.SalaryTransactionAuditId);
            builder.HasAlternateKey(e => e.TransactionBatchId);
        }
 }
如何配置(使用fluent API)对TransactionBatchId的FK约束,如下所示

public class SalaryTransactionConfiguration : IEntityTypeConfiguration<SalaryTransaction>
{
        public void Configure(EntityTypeBuilder<SalaryTransaction> builder)
        {
            builder.ToTable("SalaryTransaction");
            builder.HasKey(e => e.SalaryTransactionId);
            builder.HasForeignKey(e => e.TransactionBatchId );

        }
} 
公共类SalaryTransactionConfiguration:IEntityTypeConfiguration
{
公共void配置(EntityTypeBuilder)
{
建筑商:可转让(“工资交易”);
builder.HasKey(e=>e.SalaryTransactionId);
builder.HasForeignKey(e=>e.TransactionBatchId);
}
} 

您可以尝试使用DataAnnotation,如下所示:

public Guid TransactionBatchId { get; set; }

[ForeignKey("TransactionBatchId")]  
public SalaryTransactionAudit SalaryTransactionAudit { get; set; }

另请参见:

通过关系构建器
HasForeignKey
/
hasfrincipalkey
fluent API配置关系的外键/主键

如果您至少将导航属性添加到一个相关实体,这将是一件好事。但在当前的模型中,假设关系是一对多,可能是这样的:

public Guid TransactionBatchId { get; set; }

[ForeignKey("TransactionBatchId")]  
public SalaryTransactionAudit SalaryTransactionAudit { get; set; }
内部
SalaryTransactionConfiguration
class

builder
    .HasOne<SalaryTransactionAudit>()
    .WithMany()
    .HasForeignKey(e => e.TransactionBatchId)
    .HasPrincipalKey(e => e.TransactionBatchId);

关系总是有两个端点,因此在使用实体类型配置类时,将配置放在其中一个中,但不能同时放在两个中(以避免同一关系的冗余或冲突配置)。还要确保正确地将
Has
/
方法一起使用,即根据是否存在导航属性表达式,使用或不使用导航属性表达式。

批处理与事务之间的关系是什么,1对多或1对1?1对多是关系请检查此链接。应注意,备用键字段不允许为空值,如果需要此功能,请参阅问题和向上投票。