【问题标题】:EF Many to Many Inserting Records into Main table as well as join tableEF多对多将记录插入主表和连接表
【发布时间】:2015-03-07 21:25:01
【问题描述】:

我有一个奇怪的情况,多对多关系和插入数据。 表一(地区):

public class Region
{
    public Region()
    {
        SessionList = new List<Session>();
        UserProfileList = new List<UserProfile>();
        LeagueEventList = new List<LeagueEvent>();
    }
    public int RegionId { get; set; }
    public string RegionName { get; set; }

    public virtual ICollection<Session> SessionList { get; set; }
    public virtual ICollection<UserProfile> UserProfileList { get; set; }
    public virtual ICollection<LeagueEvent> LeagueEventList { get; set; }


}

区域表的配置文件:

    public class RegionConfig : EntityTypeConfiguration<Region>
{
    public RegionConfig()
    {
        HasKey<int>(r => r.RegionId);
        Property(r => r.RegionId).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
    }

对于表 2(LeagueEvent),我们有以下内容:

public class LeagueEvent
{
    public LeagueEvent()
    {
        LeagueEventDetails = new List<LeagueEventDetail>();
        RegionIds = new List<Region>();
        LeagueEventRegistrations = new List<LeagueEventRegistration>();
    }
    public int EventId { get; set; }
    public int VenueId { get; set; }
    public virtual Venue venue { get; set; }
    public virtual ICollection<LeagueEventDetail> LeagueEventDetails { get; set; }
    public virtual ICollection<Region> RegionIds { get; set; }
    public virtual ICollection<LeagueEventRegistration> LeagueEventRegistrations { get; set; }
}

使用以下配置文件:

public class LeagueEventConfig : EntityTypeConfiguration<LeagueEvent>
{
    public LeagueEventConfig()
    {
        HasKey<int>(e => e.EventId);
        Property(e => e.EventId).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
        HasRequired(u => u.venue).WithMany(w => w.LeagueEventList).HasForeignKey(f=> f.VenueId).WillCascadeOnDelete(false);
        HasMany<Region>(r => r.RegionIds).WithMany(e => e.LeagueEventList).Map(ler =>
            {
                ler.MapLeftKey("EventId");
                ler.MapRightKey("RegionId");
                ler.ToTable("EventRegion");

            });
    }
}

发生的情况是尝试插入可以跨越多个区域的联赛事件,这就是为什么我有 RegionIds 实体在插入和保存之前显示正确的 RegionId 值。但是,在插入并检查表格后,它显示:

在 LeagueEvent 中正确创建新记录

在 EventRegion 中创建的新记录具有正确的 EventId,但具有新的 RegionIds

在 Region 表中创建了重复 RegionName 值的新记录。

除非我有误解,否则永远不应该从联赛事件插入中创建 Region 的新记录。我是否误解了 fluent 处理连接表的方式?

更新 我删除了 .map 命令并以这种方式对其进行了测试。 EF 继续创建表,但同样的问题不断出现。

所以现在我手动创建了 EventRegion 表并更新了 Events 和 Regions ICollections 以指向该表。现在它从 Regions 表中插入具有正确值但从 Events 表中具有 0 值的记录。它也不会像以前那样将记录插入到 Region 表中。

似乎正在发生的事情是集合中的 EventRegion 记录被插入到实际事件之前,因此 EventRegion 中 EventId 的值为 0。

虽然很奇怪,但我原以为这会产生错误。如果您需要任何代码 sn-ps 进行更新,请告诉我。

任何帮助将不胜感激。 谢谢, 克里斯

【问题讨论】:

    标签: entity-framework code-first fluent


    【解决方案1】:

    因为我一直无法找到解决方案。我删除了 .map 语句,然后手动创建了连接表。现在一切都按预期工作。要是能弄清楚这个问题就好了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-24
      • 2021-09-11
      • 1970-01-01
      • 2012-04-08
      相关资源
      最近更新 更多