繁体   English   中英

种子代码首先从多对多中进行多对多

[英]Seed Code First Many-to-Many off of a Many-to-Many

我正在使用代码优先方法使用Entity Framework。 我已经为多对多关系(类型到状态)成功地播种了数据。 现在,我需要为状态和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之间添加多对多关系?

以下是几个SubStatuses的列表:

  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);
   }

我相信您正在寻找父母/子女关系? 您可以像这样重组您的Status实体并删除SubSatus类:

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() );

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM