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;

しかし、使用して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 に一度に複数の行を挿入し、挿入されたテーブルのすべての行をトリガーに表示させるにはどうすればよいですか?

ありがとう。

4

0 に答える 0