C# 使用实体框架和BulkInsert在asp mvc中添加相关实体
一开始我对英语能力感到抱歉。 我是EF的新手,遇到了一个问题。我要做的是:C# 使用实体框架和BulkInsert在asp mvc中添加相关实体,c#,asp.net,asp.net-mvc,entity-framework,bulkinsert,C#,Asp.net,Asp.net Mvc,Entity Framework,Bulkinsert,一开始我对英语能力感到抱歉。 我是EF的新手,遇到了一个问题。我要做的是: 一个主(父)实体,将foreginkey存储到其他实体(子)中 在一个事务作用域中插入多行 在父项添加时添加子项 例如: public class Parent() { [Key] public int ParentId(); public int Child_1ID {get; set;} public int Child_2ID {get; set;} [ForeginKey("Chi
- 一个主(父)实体,将foreginkey存储到其他实体(子)中
- 在一个事务作用域中插入多行
- 在父项添加时添加子项
public class Parent()
{
[Key]
public int ParentId();
public int Child_1ID {get; set;}
public int Child_2ID {get; set;}
[ForeginKey("Child_1ID")]
public virtual Child1 Child1 {get; set;}
[ForeginKey("Child_2ID")]
public virtual Child2 Child2 {get; set;}
}
公共集体诉讼()
{
使用(var transactionScope=new transactionScope())
{
usig(var ctx=new DbContext())
{
var child1ToInsert=新列表();
var child2ToInsert=新列表();
var parentToInsert=新列表();
虽然(某些条件)
{
var child1=新子级()
{
一些道具
};
child1插入。添加(child1);
var child2=新子级()
{
一些道具
};
child2ToInsert.Add(child2);
var parent=new parent()
{
Child_1ID=child1.Id;//是否正确?
Child_2ID=child2.Id;
}
parentToInsert.Add(父级);
}
ctx.批量插入(儿童1插入);
ctx.批量插入(儿童2插入);
ctx.BulkInsert(parentToInsert);
ctx.SaveChanges();
transactionScope.Complete();
}
}
所以,我有正确的数据,BulkInsert也可以正常工作,但是如何将孩子的正确Id插入到家长?现在,在尝试一些尝试之后,db中的Id为空。您是否使用ctx.BulkInsert(child1ToInsert)的扩展名;?是的,我使用来自的扩展。您不能使用此扩展立即插入此父子表。此扩展只是sqlbulkcopy中writetoserver的包装库,它只接受datatable、datarow和datareader作为参数。请参见链接Ok,所以我应该只基于sqlbulkcopy?我需要正确保留childre的Id吗n在父代中。
public class Child1()
{
public int Child_1ID {get; set;}
//some prop
}
public class Child2()
{
public int Child_2ID {get; set;}
//some prop
}
public class Action()
{
using(var transactionScope = new TransactionScope())
{
usig(var ctx = new DbContext())
{
var child1ToInsert = new List<Child1>();
var child2ToInsert = new List<Child2>();
var parentToInsert = new List<Partent>();
while( some condition )
{
var child1 = new Child()
{
some prop
};
child1ToInsert.Add(child1);
var child2 = new Child()
{
some prop
};
child2ToInsert.Add(child2);
var parent = new Parent()
{
Child_1ID = child1.Id; // is right?
Child_2ID = child2.Id;
}
parentToInsert.Add(parent);
}
ctx.BulkInsert(child1ToInsert);
ctx.BulkInsert(child2ToInsert);
ctx.BulkInsert(parentToInsert);
ctx.SaveChanges();
transactionScope.Complete();
}
}