使用Entity框架将新对象和我的新对象的子集合添加到数据库中

时间:2015-04-29 00:58:55

标签: entity-framework entity-framework-core

方法非常简单,我看不出我错过了什么......

 public int SaveEvent(Data.Models.Event evnt)
    {
        db.Events.Add(evnt);
        db.SaveChanges();

        return evnt.EventId;
    }

这是对象声明:

   public class Event
    {
        public int EventId { get; set; }
        public string Name { get; set; }
        public ICollection<EventTag> EventTags { get; set; }
    }

evnt对象包含一个属性名称EventTags,其中包含6个新元素。 evnt已插入数据库但未插入EventTag ...任何想法?没有任何错误。只是EventTag没有添加...

public class EventDbContext : DbContext
{
    public DbSet<Event> Events { get; set; }

    public DbSet<EventTag> EventTags { get; set; }
    public DbSet<Tag> Tags { get; set; }

}

以下是该值的屏幕截图: enter image description here

1 个答案:

答案 0 :(得分:1)

如果未将EventTag添加到数据库,则可能需要为每个标记手动指定EntityState。

public int SaveEvent(Data.Models.Event evnt)
{

    foreach(var tag in evnt.EventTags) 
    {
       db.Entry(tag).State = EntityState.Added; 
    }

    db.Events.Add(evnt);
    db.SaveChanges();
    return evnt.EventId;
}

您可能还想更新类定义并将EventTags属性设置为virtual

 public class Event
 {
     public int EventId { get; set; }
     public string Name { get; set; }
     public virtual ICollection<EventTag> EventTags { get; set; }
 }

在屏幕截图中,看起来标签正在加载,但不会加载标签上的Location属性。如果是这种情况,那么请确保将Location属性设置为virtual