嗨,我有一个如下实体
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 上针对FK约束配置(使用流畅的API)
public class SalaryTransactionConfiguration : IEntityTypeConfiguration<SalaryTransaction>
{
public void Configure(EntityTypeBuilder<SalaryTransaction> builder)
{
builder.ToTable("SalaryTransaction");
builder.HasKey(e => e.SalaryTransactionId);
builder.HasForeignKey(e => e.TransactionBatchId );
}
}
答案 0 :(得分:5)
关系的前/主键通过关系构建器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
方法,即根据是否存在导航属性表达式来确定是否存在。
答案 1 :(得分:0)
您可以尝试使用DataAnnotation这样的内容:
public Guid TransactionBatchId { get; set; }
[ForeignKey("TransactionBatchId")]
public SalaryTransactionAudit SalaryTransactionAudit { get; set; }
另请参阅:MSDN