Ala*_*n B 1 c# entity-framework-core ef-fluent-api asp.net-core
嗨,我有如下实体
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; }
}
Run Code Online (Sandbox Code Playgroud)
上面的实体在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);
}
}
Run Code Online (Sandbox Code Playgroud)
我也有这个实体
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; }
}
Run Code Online (Sandbox Code Playgroud)
我如何在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 );
}
}
Run Code Online (Sandbox Code Playgroud)
关系的前/主键是通过关系构建器HasForeignKey/ HasPrincipalKey流利的API 配置的。
如果您至少将导航属性添加到相关实体之一,那就太好了。但是使用当前模型,并假设关系是一对多的,则可能是这样的:
内部SalaryTransactionConfiguration类
builder
.HasOne<SalaryTransactionAudit>()
.WithMany()
.HasForeignKey(e => e.TransactionBatchId)
.HasPrincipalKey(e => e.TransactionBatchId);
Run Code Online (Sandbox Code Playgroud)
或内SalaryTransactionAuditConfiguration课
builder
.HasMany<SalaryTransaction>()
.WithOne()
.HasForeignKey(e => e.TransactionBatchId)
.HasPrincipalKey(e => e.TransactionBatchId);
Run Code Online (Sandbox Code Playgroud)
关系始终具有两端,因此,在使用实体类型配置类时,请将配置放在其中一个中,但不要同时放在两者中(以避免一个或相同关系的冗余或冲突配置)。另外,请确保正确使用Has/ With方法,即根据是否存在导航属性表达式进行选择。
| 归档时间: |
|
| 查看次数: |
279 次 |
| 最近记录: |