我正在尝试使用实体框架进行急切加载,其中我在区域和客户端之间具有一对多的关系

Posted

技术标签:

【中文标题】我正在尝试使用实体框架进行急切加载,其中我在区域和客户端之间具有一对多的关系【英文标题】:I am trying to do eager loading using Entity Framework where I have one-to-many relationship between region and client 【发布时间】:2021-08-28 19:35:33 【问题描述】:

这是我的Region 模型类:

public class Region

    [Key]
    public Guid Id  get; set; 
    public string Name  get; set; 

    //navigation property
    public virtual ICollection<Client> Clients get; set;

还有我的client 模型类:

public class Client

    [Key]
    public Guid Id  get; set; 
    public string FullName  get; set; 
    public string Email  get; set; 
    public string Mobile  get; set; 

    public virtual Region Regions get; set;
    public string AlternateNumber  get; set; 
    public string Address  get; set; 
    public string ImageName  get; set; 
   
    [NotMapped]
    public IFormFile ImageFile  get; set; 

    [NotMapped]
    public string ImageSrc  get; set; 

我正在使用 Fluent API 进行关系映射:

 builder.Entity<Client>()
        .HasOne(c => c.Regions)
        .WithMany(x => x.Clients)
        .HasForeignKey(c => c.Id); 

这里我需要RegionId 作为外键,但我无法得到它;我得到的只是ClientId 作为外键。

【问题讨论】:

【参考方案1】:

您必须在 Client 表中添加一个 RegionId 列

public class Client

    [Key]
    public Guid Id  get; set; 
   
    .....
   public Guid RegionId get; set;
   public virtual Region Region get; set;
   ....

和数据库上下文

modelBuilder.Entity<Client>(entity =>
            
                entity.HasOne(d => d.Region)
                   .WithMany(p => p.Clients)
                   .HasForeignKey(d => d.RegionId)
                   .OnDelete(DeleteBehavior.ClientSetNull);
                  
            );

【讨论】:

以上是关于我正在尝试使用实体框架进行急切加载,其中我在区域和客户端之间具有一对多的关系的主要内容,如果未能解决你的问题,请参考以下文章

实体框架急切加载不返回数据,延迟加载有

TypeORM postgresql 急切加载关系定义为惰性

渴望加载实体框架核心

代码优先实体框架。急切加载,验证然后保存导致错误

实体框架上的急切加载导航属性

实体框架和预先加载以及使用 DDD 方法的企业应用程序