ZZZ Projects (@zzzprojects) header
ZZZ Projects (@zzzprojects) profile picture

ZZZ Projects, founded by Jonathan Magnan, specializes in developer tools like Entity Framework Extensions for EF Core, Dapper Plus, and C# Eval Expression.

Joined February 2014
Photo by ZZZ Projects (@zzzprojects)Photo by ZZZ Projects (@zzzprojects)Photo by ZZZ Projects (@zzzprojects)Photo by ZZZ Projects (@zzzprojects)
How do you track what changed in your database and who changed it? In this video, Sarrawy Dev compares custom EF Core audit logging with the built-in auditing features of Entity Framework Plus, our free and open-source library. ๐ŸŽฅ youtube.com/watch?v=z-foHsP2โ€ฆ
1
2
89
๐Ÿš€ This monthโ€™s ZZZ Projects newsletter is here! ๐ŸŽ‰ ๐Ÿ‘‰ mailchi.mp/zzzprojects/whatsโ€ฆ #DotNet #EFCore #EntityFramework #ZZZProjects
28
5,000 IDs. Four fixes. How does EF Core handle it? ๐Ÿ‘€ In his latest video, Mukesh Murugan benchmarks four ways to handle large lists and composite keys in EF Core 10 including WhereBulkContains from our Entity Framework Extensions library. ๐ŸŽฅ Watch: youtube.com/watch?v=rB_jwduIโ€ฆ
21
Congrats to our October winner! ๐ŸŽ‰ โ€œI have used this in my system to save bulk data, it is very good extensionโ€ โ€” Muhammad Bilal Next month, it could be you! Share your feedback for a chance to win a free license. ๐Ÿš€ entityframework-extensions.nโ€ฆ
22
Replying to @kristijan_kralj
I don't like SQLBulkCopy. So much code to write, especially when you need to insert related entities. And it's error-prone. And it doesn't work on other databases. I prefer cross-database libraries for bulk writes for EF Core, such as Entity Framework Extensions.
1
1
58
Our September newsletter is here! ๐Ÿ“จ Catch up on the latest ZZZ Projects product updates, .NET 10 compatibility, new releases and fixes, community articles and videos, plus contest: mailchi.mp/zzzprojects/whatsโ€ฆ
1
88
With Dapper you run the application and it crashes because of a bug in SQL string Here is how to fix it ๐Ÿ‘‡ Dapper is fast and gives you full control over SQL. But that control comes with a hidden cost. Every INSERT, UPDATE, and DELETE you write lives inside a string. And strings have zero type safety. โ†ณ Rename a column? No compile error. โ†ณ Change a property type? No compile error. โ†ณ Misspell a parameter name? No compile error. You only find out something is broken when your app crashes at runtime. Here is what most developers do when using Dapper: โŒ Write SQL commands as plain strings โŒ Map every parameter by hand โŒ Repeat the same column lists across Insert, Update, and Delete โŒ Hardcode table and schema names everywhere One small refactor breaks half of your queries. And the compiler will not save you. There is a much better way. In my latest video, I show how to solve this with ๐——๐—ฎ๐—ฝ๐—ฝ๐—ฒ๐—ฟ ๐—ฃ๐—น๐˜‚๐˜€ ๐— ๐—ฎ๐—ฝ๐—ฝ๐—ถ๐—ป๐—ด. Dapper Plus gives you 3 ways to map your entities to the database - all type-safe. ๐Ÿญ. ๐—”๐˜‚๐˜๐—ผ ๐— ๐—ฎ๐—ฝ๐—ฝ๐—ถ๐—ป๐—ด โ†’ Zero configuration needed โ†’ Library matches class name to table name โ†’ Properties match column names automatically โ†’ Just call SingleInsert or BulkInsert and it works ๐Ÿฎ. ๐——๐—ฎ๐˜๐—ฎ ๐—”๐—ป๐—ป๐—ผ๐˜๐—ฎ๐˜๐—ถ๐—ผ๐—ป๐˜€ โ†’ Use [Table], [Column], [Key], [NotMapped] attributes โ†’ Familiar to anyone using EF Core โ†’ Keeps mapping next to your model ๐Ÿฏ. ๐—™๐—น๐˜‚๐—ฒ๐—ป๐˜ ๐—”๐—ฃ๐—œ ๐— ๐—ฎ๐—ฝ๐—ฝ๐—ถ๐—ป๐—ด โ†’ Full control with strongly-typed lambdas โ†’ Map only what you need: .Map(x => new { x.Name, x.Price }) โ†’ MapAuto method and DapperPlus figures it out for you โ†’ Refactor-friendly: rename a property and the compiler tells you You can also organize mappings with ๐——๐—ฎ๐—ฝ๐—ฝ๐—ฒ๐—ฟ ๐—ฃ๐—น๐˜‚๐˜€ ๐—–๐—ผ๐—ป๐˜๐—ฒ๐˜…๐˜: โ†’ Global context - configure once at startup โ†’ Instance context - configure per use case โ†’ Inheritance context - reuse mappings across services And the best part? The same mapping works for ๐—ฏ๐—ผ๐˜๐—ต free Single methods ๐—ฎ๐—ป๐—ฑ paid Bulk methods. No more SQL strings scattered across your codebase. No more runtime surprises after a refactor. Just clean, type-safe writes. Watch the full video and see all 3 mapping approaches in action. P.S.: You can get a free trial for this library and test for 30 days, and you can extend the trial for another month as needed. Get started with Dapper Plus Mapping: dapper-plus.net/mapping?utm_โ€ฆ Here is the source code: github.com/anton-martyniuk/eโ€ฆ How do you solve runtime bugs in SQL strings when using Dapper? Share below ๐Ÿ‘‡ โ€”โ€” โ™ป๏ธ Repost to help others write type-safe Dapper queries โž• Follow me ( @anton-martyniuk ) to improve your .NET and Architecture Skills Many thanks to @zzzprojects for sponsoring this post
7
12
43
5,099
This article explores the differences between SqlBulkCopy and Dapper Plus, helping developers understand the trade-offs between flexibility, simplicity, and raw speed. A great read for anyone looking to optimize bulk operations in .NET ๐Ÿ‘‡ pavle.codes/dapper-plus-or-sโ€ฆ
1
21
ZZZ Projects retweeted
Replying to @AntonMartyniuk
Dapper plus is the best library for bulk operations, super fast and comprehensive. Teams can really benefit from it. Good value for its license. It is an investment for your product.
1
1
1
63
๐Ÿ“Œ Important note: You can use the following methods for free in Dapper Plus: โ†’ SingleInsert - insert one entity without writing SQL โ†’ SingleUpdate - update one entity โ†’ SingleDelete - delete one entity โ†’ SingleMerge - upsert in one line (insert or update) โ†’ SingleSynchronize - keep your data in sync with the source โ†’ CreateTable - create the table directly from your C# class Get started with Dapper Plus: dapper-plus.net/?utm_source=โ€ฆ
1
2
232
Dapper ๐—ต๐—ฎ๐˜€ ๐—ฎ ๐—ฏ๐—ถ๐—ด ๐—ฝ๐—ฒ๐—ฟ๐—ณ๐—ผ๐—ฟ๐—บ๐—ฎ๐—ป๐—ฐ๐—ฒ ๐—ฝ๐—ฒ๐—ป๐—ฎ๐—น๐˜๐˜† ๐˜„๐—ต๐—ฒ๐—ป ๐˜†๐—ผ๐˜‚ insert multiple rows. Here is how to address this problem ๐Ÿ‘‡ Developers love Dapper for blazing-fast reads. But for inserting or updating many rows, it becomes painfully slow (even slower than EF Core). But Why? Dapper sends each row to the database one by one. 10,000 rows = 10,000 round-trips. And here is another problem: โ†ณ You need to write a lot of boilerplate code when using Dapper. Here is what most developers do when using Dapper: โŒ Write manual INSERT and UPDATE SQL statements โŒ Build complex SQL with hundreds of parameters by hand โŒ Write CREATE TABLE scripts And the problem is that you don't have type safety when writing SQL commands inside strings. When something goes wrong you will only know at runtime. There is a much better way. In my latest video, I show how to solve this with ๐——๐—ฎ๐—ฝ๐—ฝ๐—ฒ๐—ฟ ๐—ฃ๐—น๐˜‚๐˜€. ๐Ÿ‘‰ ๐—ฆ๐˜๐—ผ๐—ฝ ๐—ช๐—ฟ๐—ถ๐˜๐—ถ๐—ป๐—ด ๐—–๐—ผ๐—บ๐—ฝ๐—น๐—ฒ๐˜… ๐—ฆ๐—ค๐—Ÿ ๐˜๐—ผ ๐—ฆ๐—ฎ๐˜ƒ๐—ฒ ๐——๐—ฎ๐˜๐—ฎ - ๐—Ÿ๐—ฒ๐˜ ๐——๐—ฎ๐—ฝ๐—ฝ๐—ฒ๐—ฟ ๐—ฃ๐—น๐˜‚๐˜€ ๐——๐—ผ ๐—œ๐˜ ๐—ณ๐—ผ๐—ฟ ๐—ฌ๐—ผ๐˜‚. Dapper Plus gives you clean, simple methods for every write operation. ๐—™๐—ฟ๐—ฒ๐—ฒ ๐—ฆ๐—ถ๐—ป๐—ด๐—น๐—ฒ ๐— ๐—ฒ๐˜๐—ต๐—ผ๐—ฑ๐˜€: โ†’ SingleInsert - insert one entity without writing SQL โ†’ SingleUpdate - update one entity โ†’ SingleDelete - delete one entity โ†’ SingleMerge - upsert in one line (insert or update) โ†’ SingleSynchronize - keep your data in sync with the source โ†’ CreateTable - create the table directly from your C# class No more manual SQL. No more parameter mapping by hand. Just call the method and Dapper Plus handles the rest. All single methods are ๐—ณ๐—ฟ๐—ฒ๐—ฒ ๐˜๐—ผ ๐˜‚๐˜€๐—ฒ. ๐—ฃ๐—ฎ๐—ถ๐—ฑ ๐—•๐˜‚๐—น๐—ธ ๐— ๐—ฒ๐˜๐—ต๐—ผ๐—ฑ๐˜€ (for high performance): โ†’ BulkInsert โ†’ BulkUpdate โ†’ BulkDelete โ†’ BulkMerge โ†’ BulkSynchronize This is where the real magic happens. I inserted 10,000 product records into the database: โŒ Dapper: 7,000 ms โœ… Dapper Plus BulkInsert: 300 ms That is over ๐Ÿต๐Ÿฒ% ๐—ณ๐—ฎ๐˜€๐˜๐—ฒ๐—ฟ with a single line of code. Dapper Plus supports SQL Server, PostgreSQL, MySQL, Oracle, MariaDB, and SQLite. Watch the full video and see every method in action. P.S.: You can get a free trial for this library and test for 30 days, and you can extend the trial for another month as needed. Get started with Dapper Plus: dapper-plus.net?utm_source=aโ€ฆ Here is the source code: github.com/anton-martyniuk/eโ€ฆ How do you currently handle bulk inserts in Dapper? Share below ๐Ÿ‘‡ โ€”โ€” โ™ป๏ธ Repost to help others speed up their Dapper write queries โž• Follow me ( @AntonMartyniuk ) to improve your .NET and Architecture Skills Many thanks to @zzzprojects for sponsoring this post
๐Ÿค Paid partnership
7
8
62
3,142
๐Ÿš€ Sharing a great video on Entity Framework Extensions! If you're working with Entity Framework Core and looking to boost performance, especially for bulk operations, this is definitely worth a watch. ๐ŸŽฅ youtube.com/watch?v=amycVyBaโ€ฆ
21
๐ŸŽฌ New video is live! LINQ Dynamic vs C# Eval Expression: Which One Should You Use? Anton Martyniuk walks through key concepts and practical examples to help you get up and running. ๐Ÿ‘‰ Watch here: youtube.com/watch?v=twipi1MOโ€ฆ
111
March Monthly Contest Winner โ€œDefinitely the library is amazing, and is ideal for high-performance scenarios where efficiency and clear data access logic matter most.โ€ โ€” Nelson Solorzano, Freelancer Thanks for sharing your experience ๐Ÿ‘ ๐Ÿ‘‰ entityframework-extensions.nโ€ฆ #DotNet #EF
30
New video in Arabic! If you're working with Entity Framework, this video is worth checking out. Youโ€™ll learn how to: โœ”๏ธ Boost performance โœ”๏ธ Reduce execution time โœ”๏ธ Handle large datasets more efficiently Video here: youtube.com/watch?v=7q2lfUpaโ€ฆ #dotnet #EntityFramework
40