次のようなトリガーの後に 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;
しかし、使用してEntity FrameworkにMyTableを挿入しようとしたとき
for(i = 1; i < 30; i++)
{
MyTable myTable = new MyTable();
DoSomeThing();
MyDbContext.MyTables.Add(myTable);
}
MyDbContext.SaveChanges();
CRL トリガーは 1 回トリガーしますが、挿入されたテーブルには最後の行しかありません。私も試しました
MyDbContext.MyTables.AddRange(aListOfMyTables);
同じ問題があります。
そして試した
MyDbContext.Database.ExecuteSqlCommand("INSERT INTO MyTable(...)
VALUES (ROW1), (ROW2)... (ROW30);");
うまくいかないようです。
Entity Framework に一度に複数の行を挿入し、挿入されたテーブルのすべての行をトリガーに表示させるにはどうすればよいですか?
ありがとう。