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

时间:2018-03-06 12:51:22

标签: sql entity-framework dbcontext fluent ef-fluent-api

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

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

.attr()

我的用户表:

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密钥时,如何将对象字典列表添加到我自己的表中。

1 个答案:

答案 0 :(得分:1)

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

您可以在模型构建器中对其进行如下配置:

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