HasOptional counterpart DataAnnotation attribute

本文关键字:attribute DataAnnotation counterpart HasOptional | 更新日期: 2023-09-27 18:17:55

代码优先流畅API的HasOptional方法是否有DataAnnotation属性对应?

我想用attribute来标记我的属性,而不是使用fluent API。

这是我当前的模型&OnModelCreating代码:

public class Employee
{
  #region Properties
  public int EmployeeID { get; set; }
  public string FirstName { get; set; }
  public string LastName { get; set; }
  public int? ManagerID { get; set; }
  public Employee Manager { get; set; }
  #endregion
}
 protected override void OnModelCreating(DbModelBuilder modelBuilder)
  {
    modelBuilder.Entity<Employee>().
      HasOptional(e => e.Manager).
      WithMany().
      HasForeignKey(m => m.ManagerID);
  }

谢谢

HasOptional counterpart DataAnnotation attribute

不,这样的属性不存在(与[Required]属性相反)。我认为原因是没有必要,因为

  • 你的模型根本不需要映射,因为约定应该检测外键,而且关系是可选的(因为FK属性是可空的)
  • 如果您的模型中没有外键属性,则该关系始终是可选的,因为默认情况下,没有公开外键的导航引用始终是可选的。在这里,[Required]属性对于建立所需的关系是必要的。
  • 如果外键属性不为空,则不允许使用可选关系。

因此,似乎不需要这样的属性(除非可能在类定义中明确表示可选关系,但属性上方的注释也会这样做)。