首页 > 解决方案 > 一对一或零实体框架 Fluent API

问题描述

我正在使用 Fluent API 创建一对一或零关系,在第一种情况下 Manager - ContactDetails 它可以工作,但在第二种情况下,代表 - ContactDetails 它没有。但是配置是一样的。

据我了解,在一对一/零关系中,两个类中的一个应该将一个键定义为主键和外键,以便知道哪个类是依赖的。例如,ContactDetails 中的 Id 不能同时是代表和经理表的外键吗?这就是自动创建代表 ID 的原因?但是为什么这种关系被认为是一对多的呢?

在此处输入图像描述

经理类:

  [Table("Manager")]
public class Manager
{
    [Key]
    [ForeignKey("ApplicationUser")]
    public string Id { get; set; }
    [Required]
    [MaxLength(100)]
    public string Name { get; set; }
    public virtual ContactDetail ContactDetail { get; set; }
    [JsonIgnore]
    public virtual ICollection<Client> Clients { get; set; }
    public virtual ApplicationUser ApplicationUser { get; set; }
}

代表班:

[Table("Representative")]
public class Representative
{
    [Key]
    public int Id { get; set; }

    [Required]
    [MaxLength(99)]
    public string Name { get; set; }
    [Required]
    public int ClientId { get; set; }
    [JsonIgnore]
    public virtual Client Client{ get; set; }
   public virtual ContactDetail ContactDetail {get; set; }
}

ContactDetail类:

    public class ContactDetail
{
    [Key]
    public string Id { get; set; }

    [Required]
    [MaxLength(100)]
    public string FirstName { get; set; }
    [MaxLength(100)]
    public string SecondName { get; set; }
    [MaxLength(100)]
    public string LastName { get; set; }

    [JsonIgnore]
    public virtual Manager Manager { get; set; }

    [JsonIgnore]
   public virtual Representative Representative { get; set; }
}

上下文中的覆盖方法:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {

           modelBuilder.Entity<Manager>()
               .HasOptional(m => m.ContactDetail)
               .WithRequired(ad => ad.Manager);

          modelBuilder.Entity<Representative>()
               .HasOptional(c => c.ContactDetail)
               .WithRequired(ad => ad.Representative);

        base.OnModelCreating(modelBuilder);
    }

标签: c#sql-serverentity-framework-6ef-fluent-api

解决方案


推荐阅读