种子代码首先是多对多的多对多

Seed Code First Many-to-Many off of a Many-to-Many

我正在使用代码优先方法与 Entity Framework 合作。我已成功为多对多关系(类型到状态)播种数据。现在我需要为 Status 和 SubStatus 之间的多对多关系播种数据。

我先创建所有状态,然后我添加每个类型并添加与每个状态的多对多关系。

这是我的类型和状态:

    IList<Status> statuses = new List<Status>();

    statuses .Add(new Status() { Value = "On" });
    statuses .Add(new Status() { Value = "Off" });

    foreach (Status s in statuses)
    {
        context.Set<Status>().AddOrUpdate(s);
    }

    Type type1 = new Type()
    {
        Value = "Type 1",
        Status = new List<Status>()  
        {
            statuses.FirstOrDefault(e => e.Value == "On"),
            statuses.FirstOrDefault(e => e.Value == "Off")
        }
    };
    Type type2 = new Type() 
    { 
        Value = "Type 2", 
        Status = new List<Status>()  
        {
            statuses.FirstOrDefault(e => e.Value == "On"),
        }
    };

现在我该如何构建它然后添加 Status 和 SubStatus 之间的多对多关系?

这是几个子状态的列表:

  IList<SubStatus> subStatuses = new List<SubStatus>();
  subStatuses.Add(new SubStatus() { Value = "Success" });
  subStatuses.Add(new SubStatus() { Value = "Fail" });

   foreach (SubStatus s in subStatuses)
   {
       context.Set<SubStatus>().AddOrUpdate(s);
   }

我相信您正在寻找 parent / child 关系?您可以像这样重组 Status 实体并删除 SubSatus class:

public class Type
{
     public string Value {get;set;}
     public ICollection<Status> Statuses {get;set;}
{

public class Status
{
      public string Value {get;set;}
      public int? ParentStatusId {get;set;}
      public Status ParentStatus {get;set;}
      public ICollection<Status> ChildStatuses {get;set;}
      Public ICollection<Type> Types {get;set;}

}

然后您可以附加 ChildStatuses 并将它们与 ParentStatus

相关联
var typeA = new Type()
            {
               Value = "Type A"
            };

var typeB = new Type()
            {
               Value = "Type B"
            };
var statuses = new List<Status>(){
                     new Status()
                     {
                         Value = "On",
                         ChildStatuses = new List<Status>(){
                                               new Status()
                                               {
                                                  Value = "Success",
                                                  Types = new List<Type>()
                                                          {
                                                            typeA,
                                                            typeB
                                                          }
                                               },
                                               new Status()
                                               {
                                                  Value = "Fail",
                                                  Types = new List<Type>()
                                                          {
                                                            typeB

                                                          }
                                               }
                     }
                   };


context.Set<Status>().AddOrUpdate(s => s.Value, statuses.ToArray() );