我有一个奇怪的情况,有很多关系和插入数据。 表1(地区):
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(s)但具有新的RegionIds
在Region表中创建的新记录,RegionName值重复。
除非我误解,否则在联盟赛事插入区域中永远不应该在区域中创建新记录。我是否误解了如何处理连接表?
更新 我删除了.map命令并以这种方式进行了测试。 EF继续创建表格,但同样的问题仍然存在。
所以现在我手动创建EventRegion表并更新了Events和Regions ICollections以指向该表。现在它正在使用Regions表中的正确值插入记录,但是来自Events表的值为0。它也不会像之前一样将记录插入Region表。
似乎正在发生的事情是集合中的EventRegion记录正在实际事件之前插入,因此在EventRegion中为EventId的值为0.
奇怪的是,我认为会产生错误。如果您需要更新的任何代码段,请告诉我们。
任何帮助将不胜感激。 谢谢, 克里斯
答案 0 :(得分:0)
因为我从未找到解决方案。我删除了.map语句,然后手动创建了连接表。现在一切都按预期工作了。只是很高兴找出问题。