我有两个班级:
public class Employee
{
public int Id { get; set; }
public string Name { get; set; }
public ICollection<Document> Documents { get; set; }
}
和
public class Document
{
public int Id { get; set; }
public string SerialNumber { get; set; }
public int EmployeeId { get; set; }
}
我希望在创建(例如大摇大摆)员工时,如果未提供至少一个文档,则会发生异常。
{
"name": "Victor",
"documents": [
{
"serialNumber": "12345"
}
]
}
// must give 200OK
{
"name": "Victor"
}
// must give error
我尝试在 FluentApi 中配置它们:
modelBuilder.Entity<Employee>()
.HasMany(e => e.Documents)
.WithOne()
.HasForeignKey(d => d.EmployeeId)
.IsRequired();
modelBuilder.Entity<Document>()
.HasOne<Employee>()
.WithMany(e => e.Documents)
.HasForeignKey(d => d.EmployeeId)
.IsRequired();
但即使我不提供文件,员工也已创建。
Fluent API 配置用于配置实体及其属性之间的关系。但是,它不会验证在创建或更新实体时输入的数据。
要实现您正在寻找的验证,您可以将验证属性添加到 Employee 类属性中。具体来说,可以在Documents属性中添加[Required]属性,保证创建员工时至少需要一个文档
您还应该包括 Key 属性,以便 EF 知道这将成为该表的主键。然后将 ForiegnKey 属性添加到 EmloyeeId,这将告知 EF 该关系。
public class Employee
{
[Key]
public int EmployeeId { get; set; }
[Required(ErrorMessage = "Documents are required.")]
public ICollection<Document> Documents { get; set; }
public string Name { get; set; }
}
public class Document
{
public int Id { get; set; }
public string SerialNumber { get; set; }
[ForeignKey("Employee")]
public int EmployeeId { get; set; }
}