【发布时间】: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