gpt4 book ai didi

c# - EF Core FK 对备用键的约束

转载 作者:太空宇宙 更新时间:2023-11-03 19:39:30 24 4
gpt4 key购买 nike

您好,我有一个实体如下

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; }
}

上述实体在 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);
}
}

我也有这个实体

public class SalaryTransaction
{
public long SalaryTransactionId { get; set; }
public Guid TransactionBatchId { get; set; }
public long EmployeeId { get; set; }
public int AnnualSalary { get; set; }
public int SuperRate { get; set; }
public int PaymentPeriodYear { get; set; }
public int PaymentPeriodMonth { get; set; }

public Employee Employee { get; set; }
}

如何在 TransactionBatchId 上配置(使用流畅的 API)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 );

}
}

最佳答案

关系的外键/主键通过关系构建器 HasForeignKey/HasPrincipalKey 流畅的 API 配置。

如果您至少将导航属性添加到相关实体之一,那将会很好。但是对于当前的模型,假设关系是一对多的,它可能是这样的:

SalaryTransactionConfiguration 类中

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

或在 SalaryTransactionAuditConfiguration 类中

builder
.HasMany<SalaryTransaction>()
.WithOne()
.HasForeignKey(e => e.TransactionBatchId)
.HasPrincipalKey(e => e.TransactionBatchId);

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

关于c# - EF Core FK 对备用键的约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55683575/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com