A .NET job must create about 400,000 rows in a custom standard Dataverse table as quickly as possible. Source data is validated beforehand, so failures are rare, and the table has a synchronous plug-in on Create. Which approach should the developer use?
Select an answer to reveal the explanation.
Short Explanation
CreateMultiple is the bulk lane: one request, many rows of the same table, and plug-ins on that message get the whole set at once. Send a few hundred rows per request and you can run several in parallel. One giant request just hits size and time limits.
Full Explanation
CreateMultiple creates many rows of the same table in a single request and is the fastest option for bulk inserts into supported standard tables. Operations on standard tables run in one transaction per request, and Microsoft suggests starting with 100 to 1,000 records per request and sending requests in parallel for higher throughput. Because Dataverse merges the Create and CreateMultiple pipelines, the existing Create plug-in still runs, but moving its logic to the CreateMultiple message lets it process all rows in one invocation, which is more efficient. ExecuteMultiple still processes each Create as a separate operation, and large batches from one thread increase execution time per request without the efficiency of the bulk pipeline. Individual Create requests from one thread are the slowest option and invoke the plug-in once per row. Sending every row in one CreateMultiple request would hit message size and time limits, and with a standard table any single failure rolls back the whole request. Exam caveat: not every standard table supports CreateMultiple, so availability should be checked in the message filter metadata, and logic must not remain on both the single and bulk messages, or it runs twice. Operational check: confirm the table supports CreateMultiple, run a sample load, and compare rows per minute across batch sizes and thread counts before the full run.