📜  在 Entity Framework Core 的数据库中插入多条记录 (1)

📅  最后修改于: 2023-12-03 15:07:39.092000             🧑  作者: Mango

在 Entity Framework Core 的数据库中插入多条记录

在应用程序中,我们需要经常地与数据库交互,其中一个重要的操作就是向数据库中插入记录。当需要插入多条记录时,我们往往希望一次性提交所有的数据,而不是逐个提交。

本文将介绍如何在 Entity Framework Core 中一次性向数据库中插入多条记录。

使用 AddRange 方法

Entity Framework Core 提供了一个批量插入数据的方法 AddRange。该方法可以一次性向数据库中插入多条记录,从而避免了多次向数据库发出插入请求的问题。

List<Customer> customers = new List<Customer>
{
     new Customer { Name = "John Doe", Age = 30},
     new Customer { Name = "Jane Doe", Age = 28},
};

using (var db = new MyDbContext())
{
    db.Customers.AddRange(customers);
    db.SaveChanges();
}

在上面的代码中,我们创建了一个包含两条记录的 List 对象,并使用 AddRange 方法将其作为参数传递给 DbContext 的 Customers 属性。最后,我们最小化数据库请求的数量,调用 SaveChanges 方法一次性提交所有更改。

执行 SQL 命令

除了使用 AddRange 方法,我们还可以直接执行 SQL 命令。下面的代码演示了如何使用 Entity Framework Core 执行批量插入操作。

using (var db = new MyDbContext())
{
    using (var transaction = db.Database.BeginTransaction())
    {
        var sql = "INSERT INTO Customers (Name, Age) VALUES ";

        var customers = new List<Customer>
        {
            new Customer { Name = "John Doe", Age = 30 },
            new Customer { Name = "Jane Doe", Age = 28 },
        };

        var values = new List<string>();

        foreach (var customer in customers)
        {
            values.Add($"('{customer.Name}', {customer.Age})");
        }

        sql += string.Join(",", values);

        db.Database.ExecuteSqlCommand(sql);

        transaction.Commit();
    }
}

在上面的代码中,我们使用 BeginTransaction 方法启动一个事务。然后,我们使用 StringBuilder 生成插入语句,并调用 ExecuteSqlCommand 方法执行 SQL 命令。最后,我们提交事务,将所有更改保存到数据库中。

总结

本文介绍了在 Entity Framework Core 中一次性向数据库中插入多条记录的两种方法:使用 AddRange 方法和执行 SQL 命令。虽然 AddRange 方法简单易用,但它不支持所有的数据类型;而直接执行 SQL 命令则需要更多的代码,但却更加灵活。具体如何选择取决于你的具体场景。