C# EF CF中的种子设定和保存数组

C# EF CF中的种子设定和保存数组,c#,.net,entity-framework,ef-code-first,C#,.net,Entity Framework,Ef Code First,我的ASP.NET MVC项目中有两个模型。当设定种子以包含测试数据时,我会执行以下操作: context.Dialogs.Add(new Dialog { Id = 1, Chapter = 1, Index = 0, DialogColor = "default-color", DialogText = "blah blah!", Character = "none", Transition = false, Fade = tr

我的ASP.NET MVC项目中有两个模型。当设定种子以包含测试数据时,我会执行以下操作:

context.Dialogs.Add(new Dialog
{
    Id = 1,
    Chapter = 1,
    Index = 0,
    DialogColor = "default-color",
    DialogText = "blah blah!",
    Character = "none",
    Transition = false,
    Fade = true,
    Timer = 0,
    Actions = new List<Action>
    {
        new Action { ActionText = "--continue--", ActionLink = 1, Id=1 }
    }
});

您需要更新您的模型以使用ICollection,这样实体框架将进行适当的关联。由此:

实体框架不支持以下集合属性: 使用Add和Remove方法显示为IEnumerable

在对话框类中,将属性更新为:

 public virtual ICollection<Action> Actions { get; set; }

公共虚拟ICollection方法将在实体添加到上下文后返回该实体。

您需要更新模型以使用ICollection,以便实体框架进行适当的关联。由此:

实体框架不支持以下集合属性: 使用Add和Remove方法显示为IEnumerable

在对话框类中,将属性更新为:

 public virtual ICollection<Action> Actions { get; set; }

public virtual ICollection方法将在实体添加到上下文后返回该实体。

尝试以下操作:不要为种子设定时添加的任何实体设置
Id
。您可能不需要手动设置Id。在大多数情况下(如果您不使用特定的id生成逻辑),它应该由EF\SQL自动分配。我在将id放入之前进行了测试。请注意:不要为您在种子设定时添加的任何实体设置
id
。您可能不需要手动设置id。在大多数情况下(如果您不使用特定的id生成逻辑),它应该由EF\SQL自动分配。我在将id放入inNope之前进行了测试,但似乎仍然无法保存它,我只能认为保存方法是错误的。扩展我的答案,添加其他解决方案似乎仍然无法保存它,我只能认为save方法是错误的,因为它扩展了我的答案,添加了其他解决方案
 public virtual ICollection<Action> Actions { get; set; }
  protected override void OnModelCreating( DbModelBuilder modelBuilder )
  {
     modelBuilder.Entity<Dialog>()
        .HasMany(d => d.Actions)
        .WithOptional(a => a.Dialog);

  }
     context.Dialogs.Add( new Dialog
     {
        Id = 1,
        Chapter = 1,
        Index = 0,
        DialogColor = "default-color",
        DialogText = "blah blah!",
        Character = "none",
        Transition = false,
        Fade = true,
        Timer = 0,
        Actions = new List<Action>
            {
                context.Actions.Add(new Action()
                                       {
                                          ActionText = "--continue--",
                                          ActionLink = 1, Id=1 
                                       })
            }
     } );