我在触发器之后创建了一个 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);");
它似乎不起作用。
如何在实体框架中一次插入多行并让触发器查看插入表中的所有行?
谢谢。