实体框架 - 代码优先 - 多对多关系问题

时间:2017-11-13 15:13:22

标签: c# sql-server entity-framework many-to-many code-first

我的实体框架存在问题,这让我有点疯狂。

我有两个模型如下:

public class Day
{
  [Key]
  public int ID {get; set;}
  [Required]
  public int Name {get; set;}

  public virtual ICollection<Event> Events {get; set;}
}

public class Event
{
  [Key]
  public int ID {get; set;}
  [Required]
  public string Name {get; set;}
  public string Description {get; set;}

  public virtual ICollection<Day> Days {get; set;}
}

我指定的是'事件'有一个'日'列表,反之亦然。

现在'Event'是一个不断添加行的表,而'Day'是一个只包含5个静态行的表(星期一 - 星期五)

EF上下文还实现了如下模型构建:

modelBuilder.Entity<Event>()
            .HasMany<Day>(s => s.Day)
            .WithMany(c => c.Events)
            .Map(cs =>
            {
                cs.MapLeftKey("EventId");
                cs.MapRightKey("DayId");
                cs.ToTable("EventDays");
            });

现在出现问题如下:

当我在上下文中添加一个'Event'对象时,其中包含一个'Days'列表,除了添加到'EventDays'表中的条目之外,行将被添加到'Days'表中选定的日子。

下图显示了输出的数据:

Table Data - Visualization

为什么会这样?

在我看来,行只应添加到链接表中,在本例中是“EventDays”表。

任何帮助都会非常感激,因为我找不到其他人遇到这个特殊问题:/

由于

----------------------------------------------- ---------------------------------

更新:

当我从数据库中检索日期并手动将它们添加到事件模型时,一切正常。

这是为什么?当我之前使用实体框架时,您可以只使用嵌套对象添加模型,它会自动附加它们而不是添加更多条目。

0 个答案:

没有答案