种子代码首先是多对多的多对多
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() );
我正在使用代码优先方法与 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() );