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对多是关系请检查此链接。应注意,备用键字段不允许为空值,如果需要此功能,请参阅问题和向上投票。