c# - 一对一或零实体框架 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);
}