Code First模式下Branch与User双关联的外键问题及解决
EF Core Code First 配置Branch与User关联问题及解决方法
我正在EF Core Code First模式下配置Branch和User两个模型的关联,需要实现两种关联关系:
- 一对一关联:Branch需要关联一位联系人(ContactPerson),但User不一定是联系人。通过Branch的ContactPersonId和ContactPerson属性关联User的Id。
- 一对多关联:User可关联到Branch(非必填),一个Branch可以关联0到多个User。通过User的可选BranchId属性和Branch的ICollection
类型的Users属性实现。
但遇到问题:即使ContactPerson已存在于数据库中,创建新Branch时仍触发外键约束错误。
原模型代码
Branch类
public class Branch { public Guid Id { get; set; } = Guid.NewGuid()!; public string BranchName { get; set; } = default!; [ForeignKey("Id")] public Guid? ContactPersonId { get; set; } = default!; public User? ContactPerson { get; set; } = default!; public DateTime Created { get; set; } = DateTime.Now; [ForeignKey("BranchId")] public ICollection<User>? Users { get; set; } = new List<User>(); }
User类
public class User { public Guid Id { get; set; } = Guid.NewGuid()!; public string FullName { get; set; } = default!; public string Email { get; set; } = default!; public string PhoneNumber { get; set; } = default!; public string? Password { get; set; } public string? Salt { get; set; } public UserRoles Role { get; set; } public Guid? BranchId { get; set; } }
更新(已解决)
我改用Fluent API的方式配置关联,这种方式逻辑更清晰,具体是在DbContext的OnModelCreating方法中添加如下配置:
protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Branch>() .HasOne<User>(s => s.ContactPerson) .WithOne() .HasForeignKey<Branch>(s => s.ContactPersonId); modelBuilder.Entity<Branch>() .HasMany<User>(s => s.Users) .WithOne() .HasForeignKey("BranchId"); }
内容的提问来源于stack exchange,提问作者Heis
相关产品推荐
相关产品推荐

