0

我在触发器之后创建了一个 CLR,如下所示:

[Microsoft.SqlServer.Server.SqlTrigger(Name = "MyTrigger", Target = "[dbo].[MyTable]", Event = "AFTER INSERT, UPDATE")]

public static void TriggerName()
{
    SqlCommand command;
    SqlTriggerContext triggContext = SqlContext.TriggerContext;
    SqlPipe pipe = SqlContext.Pipe;
    SqlDataReader reader;

    using (SqlConnection connection
       = new SqlConnection(@"context connection=true"))
    {
        connection.Open();
        command = new SqlCommand(@"SELECT * FROM INSERTED;",
           connection);
        reader = command.ExecuteReader();

        while (reader.Read())
        {
            PopulateDataFromOneRow();
        }
        reader.Close();
        ProcessInsertedData();
    }
}

触发器应该处理多行插入。它适用于 SQL 查询,例如

   INSERT INTO MyTable SELECT * FROM AnotherTableWithSameSchema;

但是当我尝试使用在实体框架中插入 MyTable

    for(i = 1; i < 30; i++)
    {
        MyTable myTable = new MyTable();
        DoSomeThing();
        MyDbContext.MyTables.Add(myTable);
    }
    MyDbContext.SaveChanges();

CRL 触发器触发一次,但插入的表只有最后一行。我也试过

    MyDbContext.MyTables.AddRange(aListOfMyTables);

它有同样的问题。

并尝试过

    MyDbContext.Database.ExecuteSqlCommand("INSERT INTO MyTable(...) 
                                 VALUES (ROW1), (ROW2)... (ROW30);");

它似乎不起作用。

如何在实体框架中一次插入多行并让触发器查看插入表中的所有行?

谢谢。

4

0 回答 0