Fluent API与静态表的一对多关系

问题描述 投票:0回答:1

我需要帮助。我有三个静态表(国家,地区和城市词典)。我在Initilizer类中设置了这个表。我需要使用我自己的User表创建一对多关系,而不需要通过Fluent API在字典表中创建Foregion Key。

字典表(国家,地区和城市):

enter image description here

我的用户表:

public class UserWorker
{
  public UserWorker()
    {
        Countries = new List<DCountry>();
        Regions = new List<DRegion>();
        Cities = new List<DCity>();
        Professions = new List<DProfession>();
    }

    public int UserWorkerId { get; set; }

    public virtual ICollection<DCountry> Countries { get; set; }

    public virtual ICollection<DRegion> Regions { get; set; }

    public virtual ICollection<DCity> Cities { get; set; }

    public virtual ICollection<DProfession> Professions { get; set; }
}

如何在没有UserWorker_UserWorkerId的情况下添加关系?

P.S:我有另外两个我自己的表,需要通过Fluent API以相同的关系连接一对多。

我不明白如何在我的静态表中创建虚拟foregion密钥时,如何将对象字典列表添加到我自己的表中。

sql entity-framework dbcontext fluent ef-fluent-api
1个回答
1
投票

如果单个用户可以拥有多个城市,并且可以将同一城市分配给多个用户,则这是一种多对多关系。

您可以在ModelBuilder中对此进行如下配置:

ModelBuilder.Entity<UserWorker>()
   .HasMany(u => u.Cities)
   .WithMany()
   .Map(x => {
        x.MapLeftKey("UserWorkerId");
        x.MapRightKey("CityId");
        x.ToTable("UserWorkerToCityMap");
   });

EF将为这种关系创建一个额外的表UserWorkerToCityMap,它有两列,其中包含对UserWorkerIdCityId的外键引用。不会向DCity添加其他外键列。

Configure Many-to-Many Relationship in Code-First