Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用实体框架和BulkInsert在asp mvc中添加相关实体_C#_Asp.net_Asp.net Mvc_Entity Framework_Bulkinsert - Fatal编程技术网

C# 使用实体框架和BulkInsert在asp mvc中添加相关实体

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

一开始我对英语能力感到抱歉。 我是EF的新手,遇到了一个问题。我要做的是:


  • 一个主(父)实体,将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();
        }
    }