<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Amina Elsheikh</title>
    <description>The latest articles on Forem by Amina Elsheikh (@aminaelsheikh).</description>
    <link>https://forem.com/aminaelsheikh</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F912016%2F7723c33d-7dce-4440-a590-13a6ca9d5e39.jpeg</url>
      <title>Forem: Amina Elsheikh</title>
      <link>https://forem.com/aminaelsheikh</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/aminaelsheikh"/>
    <language>en</language>
    <item>
      <title>ABP vs RepoGen</title>
      <dc:creator>Amina Elsheikh</dc:creator>
      <pubDate>Sun, 06 Jul 2025 17:42:23 +0000</pubDate>
      <link>https://forem.com/aminaelsheikh/abp-vs-repogen-5g80</link>
      <guid>https://forem.com/aminaelsheikh/abp-vs-repogen-5g80</guid>
      <description>&lt;h2&gt;
  
  
  I Asked ChatGPT: What’s the Difference Between &lt;code&gt;DEFC.Util.RepoGen&lt;/code&gt; and the ABP Framework for .NET?
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"I’m building a .NET project and found two interesting tools: &lt;code&gt;DEFC.Util.RepoGen&lt;/code&gt; and the ABP Framework. They both promise productivity, but they seem to solve very different problems. So, I did what any curious dev would do — I asked ChatGPT."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Here’s what I learned, and it helped me make a clear decision. If you're wondering the same, this might save you some research time. 🧠&lt;/p&gt;

&lt;h3&gt;
  
  
  ⚔️ The TL;DR
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature / Aspect&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;DEFC.Util.RepoGen&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;ABP Framework&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;What is it?&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;A CLI tool for auto-generating Repositories, Unit of Work, and CRUD services&lt;/td&gt;
&lt;td&gt;A full-stack, modular, enterprise app framework&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Ideal For&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Projects with stored procedures or existing DBs&lt;/td&gt;
&lt;td&gt;Building domain-driven, scalable .NET apps from scratch&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Architecture Style&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Clean Architecture (with optional folder models)&lt;/td&gt;
&lt;td&gt;Domain-Driven Design (DDD), Layered, Modular&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Stored Procedure Support&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅ First-class via CLI mapping&lt;/td&gt;
&lt;td&gt;⚠️ Manual/indirect support&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CRUD Table Support&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅ Full CRUD generation (Repo, Service, Controller)&lt;/td&gt;
&lt;td&gt;✅ Scaffolded via framework conventions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;UI Support&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;❌ None (backend only)&lt;/td&gt;
&lt;td&gt;✅ Angular/Blazor UI generation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Learning Curve&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;🟢 Simple and lightweight&lt;/td&gt;
&lt;td&gt;🔴 Medium to high&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Out-of-the-box Features&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Just scaffolding — nothing more&lt;/td&gt;
&lt;td&gt;Auth, multi-tenancy, localization, modularity, etc.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  🧰 DEFC.Util.RepoGen in a Nutshell
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;It’s a CLI utility that generates boilerplate code for:&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;* Repositories
* Unit of Work
* CRUD Services
* Optional Controller classes
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;It works for both:&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;* **Stored procedures** (via mapping commands)
* **Tables** (via `crud` command)
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You configure your setup via a &lt;code&gt;RepoGen.json&lt;/code&gt; file, run a few CLI commands, and it scaffolds clean, layered architecture following your chosen structure.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;💡 If your DB is already built and you’re tired of writing repetitive Repository/Service code — this tool is a huge time-saver.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  🏗️ ABP Framework: The Full Package
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;ABP is a full-stack, open-source framework for building modular and scalable .NET applications.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Out-of-the-box, it includes:&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- Authentication &amp;amp; Authorization
- Multi-tenancy
- Localization
- UI frameworks (Angular, Blazor)
- Domain services
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It’s built around Domain-Driven Design (DDD) principles and is ideal for greenfield projects that need full enterprise features.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;💡 If you’re planning a long-living SaaS platform — ABP might be all you need.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  🧠 My Takeaway After ChatGPT's Explanation
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;If you’re working with an &lt;strong&gt;existing database&lt;/strong&gt;, especially one full of stored procedures or defined table structures, and just want clean, testable code fast — &lt;strong&gt;DEFC.Util.RepoGen is fantastic&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;If you’re building a &lt;strong&gt;new, enterprise-grade app&lt;/strong&gt; with multi-tenancy, auth, localization, modular UIs — &lt;strong&gt;ABP Framework is your friend&lt;/strong&gt; (but expect a learning curve).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  💬 What Did I Choose?
&lt;/h3&gt;

&lt;p&gt;I ended up using &lt;strong&gt;RepoGen&lt;/strong&gt; for a project where the database already existed and was full of stored procedures. It let me map SPs to repos in seconds, and I stayed in full control of the architecture.&lt;/p&gt;

&lt;p&gt;If I start a brand new SaaS product later on, especially one that needs multi-tenancy and built-in auth, &lt;strong&gt;ABP will be at the top of my list&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  📚 More About RepoGen
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/aminaelsheikh/automate-repository-generation-in-net-with-repogen-n29"&gt;How to automate Repository Generation in .NET with RepoGen&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/aminaelsheikh/how-i-reduced-my-net-repository-development-time-by-more-than-50-with-repogen-3lk9"&gt;How I Reduced My .NET Repository Development Time by more than 50% with RepoGen&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>abp</category>
      <category>programming</category>
      <category>csharp</category>
      <category>dotnet</category>
    </item>
    <item>
      <title>🛠️ How I Reduced My .NET Repository Development Time by more than 50% with RepoGen</title>
      <dc:creator>Amina Elsheikh</dc:creator>
      <pubDate>Tue, 24 Jun 2025 12:59:16 +0000</pubDate>
      <link>https://forem.com/aminaelsheikh/how-i-reduced-my-net-repository-development-time-by-more-than-50-with-repogen-3lk9</link>
      <guid>https://forem.com/aminaelsheikh/how-i-reduced-my-net-repository-development-time-by-more-than-50-with-repogen-3lk9</guid>
      <description>&lt;p&gt;As developers, we know the pain of &lt;strong&gt;writing repetitive code&lt;/strong&gt; for repository classes — especially when working with &lt;strong&gt;stored procedures&lt;/strong&gt; in .NET. Creating repositories manually can be time-consuming and error-prone, which leads to wasted development time and maintenance headaches. &lt;/p&gt;

&lt;p&gt;That's when I found &lt;strong&gt;RepoGen&lt;/strong&gt;. It’s a tool that automates the entire process of &lt;strong&gt;repository generation&lt;/strong&gt;, and in this post, I’ll explain how I reduced my repository development time by 50% and kept my codebase clean and consistent. &lt;/p&gt;

&lt;h3&gt;
  
  
  🏁 The Problem: Repository Generation Without Automation
&lt;/h3&gt;

&lt;p&gt;When starting a new .NET project, I often had to create repositories manually, mapping each stored procedure to a repository method. Every time the stored procedure changed, or new ones were added, I had to go back and update multiple repository classes. It felt like I was repeating the same process over and over again, which wasn’t productive.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Challenges I Faced:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Repetitive Work&lt;/strong&gt;: Writing similar methods for every stored procedure.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Error-Prone&lt;/strong&gt;: Manually mapping SPs often led to missing or incorrect mappings.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hard to Maintain&lt;/strong&gt;: With multiple repositories, any changes in structure required refactoring multiple files.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  ⚡ The Solution: RepoGen
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;RepoGen&lt;/strong&gt; is a NuGet CLI tool that automates repository and unit of work creation based on your stored procedures. Instead of writing the same code over and over again, RepoGen generates the repository classes for you. Here the key features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ &lt;strong&gt;Automatic Repository Generation&lt;/strong&gt; – Generates repository classes mapped to SQL Server stored procedures.&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Unit of Work Integration&lt;/strong&gt; – Creates a &lt;code&gt;UnitOfWork&lt;/code&gt; class to manage transactions across repositories.&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Stored Procedure Mapping&lt;/strong&gt; – Automates method creation inside repositories that correspond to stored procedures.&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;CRUD Generator&lt;/strong&gt; – Generates full CRUD (Create, Read, Update, Delete) logic and models for SQL tables.&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Clean Architecture Support&lt;/strong&gt; – Supports multiple folder structures: Clean, Layered, Hexagonal, or Custom.&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Batch Command Execution&lt;/strong&gt; – Run multiple operations from a JSON batch script.&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Dynamic DTO &amp;amp; Model Generation&lt;/strong&gt; – Generates Data Transfer Objects and domain models from stored procedures or tables.&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Endpoint Creation&lt;/strong&gt; – Auto-generates RESTful controller endpoints (e.g., POST, GET, PUT, DELETE) alongside SP and CRUD mappings.&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Offline &amp;amp; Secure&lt;/strong&gt; – Operates fully offline with no external calls or telemetry.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  📚 Documentation
&lt;/h3&gt;

&lt;p&gt;Full guides, step-by-step examples, and command references are available in the 📘 &lt;a href="https://github.com/AminaElsheikh/DEFC.Util.RepoGen/wiki" rel="noopener noreferrer"&gt;Wiki&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📦 Try It Yourself
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;RepoGen&lt;/strong&gt; is available now as a NuGet package. If you're working on a .NET project and want to save time while keeping your code clean, give &lt;strong&gt;RepoGen&lt;/strong&gt; a try! &lt;/p&gt;

&lt;p&gt;You can find &lt;strong&gt;RepoGen&lt;/strong&gt; on &lt;a href="https://www.nuget.org/packages/DEFC.Util.RepoGen/1.0.0-beta" rel="noopener noreferrer"&gt;NuGet&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;You can find &lt;strong&gt;RepoGen&lt;/strong&gt; sample on &lt;a href="https://github.com/AminaElsheikh/DEFC.Util.RepoGen-SampleStore/wiki/Step-by-step-practice-sample-guide" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;. &lt;/p&gt;

&lt;h3&gt;
  
  
  📎 Related Packages
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.nuget.org/packages/DEFC.Util.DataValidation" rel="noopener noreferrer"&gt;DEFC.Util.DataValidation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.nuget.org/packages/DEFC.Util.Generator" rel="noopener noreferrer"&gt;DEFC.Util.Generator&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  📚 More About RepoGen
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/aminaelsheikh/automate-repository-generation-in-net-with-repogen-n29"&gt;Automate Repository Generation in .NET with RepoGen&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;🙏 Thank you for supporting the development of DEFC.Util.RepoGen. Let’s build clean, maintainable .NET applications together!&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>dotnet</category>
      <category>automation</category>
      <category>csharp</category>
      <category>cli</category>
    </item>
    <item>
      <title>🛠️ Automate Repository Generation in .NET with RepoGen</title>
      <dc:creator>Amina Elsheikh</dc:creator>
      <pubDate>Tue, 24 Jun 2025 12:56:07 +0000</pubDate>
      <link>https://forem.com/aminaelsheikh/automate-repository-generation-in-net-with-repogen-n29</link>
      <guid>https://forem.com/aminaelsheikh/automate-repository-generation-in-net-with-repogen-n29</guid>
      <description>&lt;h1&gt;
  
  
  DEFC.Util.RepoGen
&lt;/h1&gt;

&lt;p&gt;If you’ve ever built a .NET application that uses stored procedures, you’ve probably written a lot of repetitive repository code. While clean architecture and the repository pattern are great for maintainability, they come with a cost — &lt;strong&gt;boilerplate&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;That’s why I built &lt;strong&gt;RepoGen&lt;/strong&gt; — a NuGet CLI tool that helps .NET developers automatically generate repository classes, structure folders, and map stored procedures with &lt;strong&gt;just a few commands&lt;/strong&gt;. &lt;/p&gt;

&lt;h2&gt;
  
  
  🧩 What is RepoGen?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;DEFC.Util.RepoGen&lt;/strong&gt; is a .NET CLI and NuGet tool that automates the implementation of the &lt;strong&gt;Repository&lt;/strong&gt; &lt;br&gt;
and &lt;strong&gt;Unit of Work&lt;/strong&gt; patterns using &lt;strong&gt;SQL Server stored procedures&lt;/strong&gt;. It simplifies the generation of clean, &lt;br&gt;
scalable, and maintainable architecture in .NET applications, while promoting strong separation of concerns.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;🚧 Beta Version Notice&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;🔬 This is a Beta Release&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;DEFC.Util.RepoGen&lt;/code&gt; is currently in beta and under active testing. While it is functional and ready for &lt;br&gt;
practical use, we are still refining and improving the tool based on user feedback.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;We invite developers and teams to &lt;strong&gt;test the tool&lt;/strong&gt; in real-world scenarios and help us identify bugs, edge cases, or areas for improvement.&lt;br&gt;
Your feedback is valuable and will directly contribute to shaping the &lt;strong&gt;final stable release&lt;/strong&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  🛠️ Key Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;✅ &lt;strong&gt;Automatic Repository Generation&lt;/strong&gt; – Generates repository classes mapped to SQL Server stored procedures.&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Unit of Work Integration&lt;/strong&gt; – Creates a &lt;code&gt;UnitOfWork&lt;/code&gt; class to manage transactions across repositories.&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Stored Procedure Mapping&lt;/strong&gt; – Automates method creation inside repositories that correspond to stored procedures.&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;CRUD Generator&lt;/strong&gt; – Generates full CRUD (Create, Read, Update, Delete) logic and models for SQL tables.&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Clean Architecture Support&lt;/strong&gt; – Supports multiple folder structures: Clean, Layered, Hexagonal, or Custom.&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Batch Command Execution&lt;/strong&gt; – Run multiple operations from a JSON batch script.&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Dynamic DTO &amp;amp; Model Generation&lt;/strong&gt; – Generates Data Transfer Objects and domain models from stored procedures or tables.&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Endpoint Creation&lt;/strong&gt; – Auto-generates RESTful controller endpoints (e.g., POST, GET, PUT, DELETE) alongside SP and CRUD mappings.&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Offline &amp;amp; Secure&lt;/strong&gt; – Operates fully offline with no external calls or telemetry.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  🛠 Prerequisites
&lt;/h3&gt;

&lt;p&gt;Install required EF Core dependencies:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dotnet add package Microsoft.EntityFrameworkCore
dotnet add package Microsoft.EntityFrameworkCore.SqlServer
dotnet add package Microsoft.Data.SqlClient
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  📦 Installation
&lt;/h3&gt;

&lt;p&gt;Install the NuGet package:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dotnet new tool-manifest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dotnet tool &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--local&lt;/span&gt; DEFC.Util.RepoGen &lt;span class="nt"&gt;--version&lt;/span&gt; 1.0.0-beta
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🚀 Quick Start
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Initialize:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dotnet tool run RepoGen initial
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;dotnet tool run RepoGen initial&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Configure RepoGen.json:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Config"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"DBConfig"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"SchemaID"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"DBContextName"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"YOUR_DBCONTEXTNAME_HERE"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"ConnectionString"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Server=SERVER_NAME;Database=DATABASE_NAME;User Id=USER_NAME;Password=PASSWORD;TrustServerCertificate=True"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"AppConfig"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Namespace"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"YOUR_NAMESPACE_HERE"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"FoldersStructureModel"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"MODEL_1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"LoggerCode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"101"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Suffixes"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"Model"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Models"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Suffix&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;domain&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;or&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;entity&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;classes&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"DTO"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Dtos"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Suffix&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;data&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;transfer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;objects&lt;/span&gt;&lt;span class="w"&gt; 

      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Generate Folder Structure:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dotnet tool run RepoGen structure &lt;span class="nb"&gt;set&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Test DB Connection:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dotnet tool run RepoGen &lt;span class="nb"&gt;test &lt;/span&gt;db-connection
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dotnet tool run RepoGen  structure &lt;span class="nb"&gt;test&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Generate CRUD for a Table:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dotnet tool run RepoGen crud &lt;span class="nt"&gt;--tbl&lt;/span&gt; &amp;lt;YourTableName&amp;gt; &lt;span class="nt"&gt;--service&lt;/span&gt; &amp;lt;YourServiceName&amp;gt; &lt;span class="nt"&gt;--controller&lt;/span&gt; &amp;lt;YourControllerName&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dotnet tool run RepoGen crud &lt;span class="nt"&gt;--tbl&lt;/span&gt; &amp;lt;YourTableName&amp;gt; &lt;span class="nt"&gt;--service&lt;/span&gt; &amp;lt;YourServiceName&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Stored Procedure Mapping&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;1- Map a stored procedure to a repository:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dotnet tool run RepoGen map &lt;span class="nt"&gt;--sp&lt;/span&gt; &amp;lt;YourStoredProcedureName&amp;gt; &lt;span class="nt"&gt;--repo&lt;/span&gt; &amp;lt;YourRepoName&amp;gt; &lt;span class="nt"&gt;--controller&lt;/span&gt; &amp;lt;ControllerName&amp;gt; &lt;span class="nt"&gt;--endpoint&lt;/span&gt; &amp;lt;EndpointName&amp;gt; &lt;span class="nt"&gt;--&lt;/span&gt;&amp;lt;Method&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dotnet tool run RepoGen map &lt;span class="nt"&gt;--sp&lt;/span&gt; &amp;lt;YourStoredProcedureName&amp;gt; &lt;span class="nt"&gt;--repo&lt;/span&gt; &amp;lt;YourRepoName&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;2- Remap a stored procedure to a repository with controller endpoint:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dotnet tool run RepoGen re-map &lt;span class="nt"&gt;--sp&lt;/span&gt; &amp;lt;YourStoredProcedureName&amp;gt; &lt;span class="nt"&gt;--repo&lt;/span&gt; &amp;lt;YourRepoName&amp;gt; &lt;span class="nt"&gt;--controller&lt;/span&gt; &amp;lt;ControllerName&amp;gt; &lt;span class="nt"&gt;--endpoint&lt;/span&gt; &amp;lt;EndpointName&amp;gt; &lt;span class="nt"&gt;--&lt;/span&gt;&amp;lt;Method&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;3- Remove a mapped stored procedure:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dotnet tool run RepoGen remove &lt;span class="nt"&gt;--sp&lt;/span&gt; &amp;lt;YourStoredProcedureName&amp;gt; &lt;span class="nt"&gt;--repo&lt;/span&gt; &amp;lt;YourRepoName&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  📁 Architecture Support
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;🧱 MODEL_1: Clean Architecture (default) &lt;/li&gt;
&lt;li&gt;🧱 MODEL_2: Layered Architecture &lt;/li&gt;
&lt;li&gt;🧱 MODEL_3: Hexagonal (Ports &amp;amp; Adapters) &lt;/li&gt;
&lt;li&gt;🧱 MODEL_CUSTOM: Fully configurable layout via custom_model.json&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  📚 Documentation
&lt;/h3&gt;

&lt;p&gt;Full guides, step-by-step examples, and command references are available in the 📘 &lt;a href="https://github.com/AminaElsheikh/DEFC.Util.RepoGen/wiki" rel="noopener noreferrer"&gt;Wiki&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📦 Try It Yourself
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;RepoGen&lt;/strong&gt; is available now as a NuGet package. If you're working on a .NET project and want to save time while keeping your code clean, give &lt;strong&gt;RepoGen&lt;/strong&gt; a try! &lt;/p&gt;

&lt;p&gt;You can find &lt;strong&gt;RepoGen&lt;/strong&gt; on &lt;a href="https://www.nuget.org/packages/DEFC.Util.RepoGen/1.0.0-beta" rel="noopener noreferrer"&gt;NuGet&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;You can find &lt;strong&gt;RepoGen&lt;/strong&gt; sample on &lt;a href="https://github.com/AminaElsheikh/DEFC.Util.RepoGen-SampleStore/wiki/Step-by-step-practice-sample-guide" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;. &lt;/p&gt;

&lt;h3&gt;
  
  
  📎 Related Packages
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.nuget.org/packages/DEFC.Util.DataValidation" rel="noopener noreferrer"&gt;DEFC.Util.DataValidation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.nuget.org/packages/DEFC.Util.Generator" rel="noopener noreferrer"&gt;DEFC.Util.Generator&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  📄 License
&lt;/h3&gt;

&lt;p&gt;Licensed under the Elastic License 2.0.&lt;br&gt;
See full license details &lt;a href="https://www.elastic.co/licensing/elastic-license" rel="noopener noreferrer"&gt;here&lt;/a&gt;. &lt;/p&gt;

&lt;h3&gt;
  
  
  🐞 Issues &amp;amp; Feedback
&lt;/h3&gt;

&lt;p&gt;Found a bug or want to contribute?&lt;br&gt;
📬 &lt;a href="https://github.com/AminaElsheikh/DEFC.Util.RepoGen/issues" rel="noopener noreferrer"&gt;Open an issue&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  📚 More About RepoGen
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/aminaelsheikh/how-i-reduced-my-net-repository-development-time-by-more-than-50-with-repogen-3lk9"&gt;How I Reduced My .NET Repository Development Time by more than 50% with RepoGen&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;🙏 Thank you for supporting the development of DEFC.Util.RepoGen. Let’s build clean, maintainable .NET applications together!&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>api</category>
      <category>dotnet</category>
      <category>automation</category>
      <category>csharp</category>
    </item>
    <item>
      <title>Data Generator Nuget Package</title>
      <dc:creator>Amina Elsheikh</dc:creator>
      <pubDate>Mon, 27 Feb 2023 12:00:13 +0000</pubDate>
      <link>https://forem.com/aminaelsheikh/data-generator-nuget-package-1fij</link>
      <guid>https://forem.com/aminaelsheikh/data-generator-nuget-package-1fij</guid>
      <description>&lt;h1&gt;
  
  
  Objective
&lt;/h1&gt;

&lt;p&gt;This is a cross platform NET Standard 2.0 generator library containing a bunch of generating codes that I needed while developing apps. I hope it will save your development time.&lt;/p&gt;

&lt;h1&gt;
  
  
  About
&lt;/h1&gt;

&lt;p&gt;This library is one of DEFC utilities packages that contains several types of data generating, to help the developers minify their codes in easy way with no time. Through this package can :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Generate GUID.&lt;/li&gt;
&lt;li&gt;Generate Random Symbol.&lt;/li&gt;
&lt;li&gt;Generate Unique Code and compare it to a list.&lt;/li&gt;
&lt;li&gt;Generate Random String with specific length and choose if it is lowercase or uppercase or both.&lt;/li&gt;
&lt;li&gt;Generate Random Number between min and max.&lt;/li&gt;
&lt;li&gt;Generate any Random Code.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Example
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="n"&gt;Install&lt;/span&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;Package&lt;/span&gt; &lt;span class="n"&gt;DEFC&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Util&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Generator&lt;/span&gt; &lt;span class="p"&gt;--&lt;/span&gt;&lt;span class="n"&gt;version&lt;/span&gt; &lt;span class="m"&gt;1.0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;DEFC.Util&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="nf"&gt;GeneratePassword&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;StringBuilder&lt;/span&gt; &lt;span class="n"&gt;builder&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;StringBuilder&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
            &lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Generator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;RandomString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;span class="c1"&gt;//2 lower case random letters&lt;/span&gt;
            &lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Generator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;RandomString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;false&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;span class="c1"&gt;//3 uppper case random letters&lt;/span&gt;
            &lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Generator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;RandomSymbol&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;&lt;span class="c1"&gt;//random symbol&lt;/span&gt;
            &lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Generator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;RandomNumber&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;9999&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;span class="c1"&gt;//random number between 1000 and 9999&lt;/span&gt;

            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ToString&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="nf"&gt;GenerateUser&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;ListToCheck&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;CharacterSet&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"ABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890"&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ToCharArray&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
            &lt;span class="c1"&gt;//Generate user with 20 characters length from a set of character and check if it is already exists in a list of users    &lt;/span&gt;

            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;Generator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;UniqueCode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;CharacterSet&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;20&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ListToCheck&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;   
        &lt;span class="p"&gt;}&lt;/span&gt;         
        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="nf"&gt;GenerateClientID&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;CharacterSet&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"ABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890"&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ToCharArray&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

            &lt;span class="n"&gt;StringBuilder&lt;/span&gt; &lt;span class="n"&gt;builder&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;StringBuilder&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
            &lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Generator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;RandomCode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;CharacterSet&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="m"&gt;8&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;span class="c1"&gt;//8 random characters&lt;/span&gt;
            &lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"-"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Generator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;RandomCode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;CharacterSet&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;4&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;span class="c1"&gt;//4 random characters&lt;/span&gt;
            &lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"-"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Generator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;RandomCode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;CharacterSet&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;12&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;span class="c1"&gt;//12 random characters&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ToString&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>gratitude</category>
    </item>
    <item>
      <title>Data Validation Nuget Package</title>
      <dc:creator>Amina Elsheikh</dc:creator>
      <pubDate>Mon, 27 Feb 2023 11:49:58 +0000</pubDate>
      <link>https://forem.com/aminaelsheikh/data-validation-nuget-package-kco</link>
      <guid>https://forem.com/aminaelsheikh/data-validation-nuget-package-kco</guid>
      <description>&lt;h1&gt;
  
  
  Objective
&lt;/h1&gt;

&lt;p&gt;This is a cross platform NET Standard 2.0 validation library containing a bunch of validation code that we have to rewrite every time we develop apps. Due to the time we have to spend every day in validating data. This library was developed to help in saving our development time.&lt;/p&gt;

&lt;h1&gt;
  
  
  About
&lt;/h1&gt;

&lt;p&gt;This library is one of DEFC utilities packages that contains several types of data validation methods, to help the developers minify their codes in easy way with no time. Through this package can :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Check if a value is (Alphanumeric, Alpha, GUID, Base64, NullOrEmptyOrWhiteSpace, Email,URL,DateTime, Number, Byte, Short, Integer, Long, Decimal, Double, Float, IPv4, IPv6, IP, MACAddress, LatitudeLongitude )&lt;/li&gt;
&lt;li&gt;Check if a value is between tow values, check if a value is between tow values or equal one of them, check if a value is equal to another value, check if value is greater than or equal another value and check if value is less than or equal another value.&lt;/li&gt;
&lt;li&gt;Match password and confirm password.&lt;/li&gt;
&lt;li&gt;Check if password is strong with at least one uppercase, one lowercase, one digit and one of the custom symbols with specific password length by sets the password rules.
this library is available on nuget.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="n"&gt;Install&lt;/span&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;Package&lt;/span&gt; &lt;span class="n"&gt;DEFC&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Util&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;DataValidation&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;Version&lt;/span&gt; &lt;span class="m"&gt;1.0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Example
&lt;/h1&gt;

&lt;p&gt;Console application with full example available at &lt;a href="https://github.com/AminaElsheikh/DEFC.Util.DataValidationExamples" rel="noopener noreferrer"&gt;the GitHub repository&lt;/a&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;DEFC.Util.DataValidation&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;System.Text.RegularExpressions&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
C#
 public static void Validator()
        {           
            //Sample of data type validator
            bool IsValidAlphanumeric= DataType.IsAlphanumeric("Foo1234");
            bool IsValidGUID = DataType.IsGUID("am I a GUID");
            bool IsValidIPv4 = DataType.IsIPv4("127.0.0.1");
            bool IsValidURL = DataType.IsURL("https://www.nuget.org");
            //Sample of math validator
            bool IsValidNegative = Math.IsNegative(-1);
            bool IsValidEven = Math.IsEven(9);
            //Sample of comparison validator
            bool IsBetween = Comparison.IsBetween(4,2,10);
            bool IsLessThanOrEqual = Comparison.IsLessThanOrEqual(12,3);
            //Sample of SQL Injection validator
            bool HasSQLInjection = SQLInjection.IsExists("' or 1=1");
            //Sample of Regular Expression validator
            bool IsValidExpression = RegularExpression.IsMatch("Foo1234",new Regex("[a-zA-Z0-9]*$"));
            //Sample of Password validator
            bool Isvalid = Password.ValidatRules(new PasswordRules() 
                                                {
                                                 Password="Foo@123",
                                                 HasUpper=true,
                                                 HasLower=true,
                                                 HasDigit=true,
                                                 HasLength=true,
                                                 passwordMinLength=6,
                                                 HasSymbols=true,
                                                 symbols="@,&amp;amp;"
                                                });
        }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>nextjs</category>
      <category>webdev</category>
      <category>softwaredevelopment</category>
    </item>
    <item>
      <title>C# Why to Validate Data?</title>
      <dc:creator>Amina Elsheikh</dc:creator>
      <pubDate>Mon, 19 Sep 2022 11:28:39 +0000</pubDate>
      <link>https://forem.com/aminaelsheikh/c-why-to-validate-data-2eg1</link>
      <guid>https://forem.com/aminaelsheikh/c-why-to-validate-data-2eg1</guid>
      <description>&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;p&gt;Having accurate, high quality source data means that we will generate data that is clean, helpful, consistent, and accurate aiming to avoid data loss and errors during the using of the data, migrating and merging data.&lt;/p&gt;

&lt;h1&gt;
  
  
  Definition
&lt;/h1&gt;

&lt;p&gt;Data Validation is the process of making sure that the data source is accurate before collecting, using, importing, analyzing, or preparing data.&lt;/p&gt;

&lt;h1&gt;
  
  
  Importance of validation
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Reducing Data Loss.&lt;/li&gt;
&lt;li&gt;Producing accurate Data.&lt;/li&gt;
&lt;li&gt;Avoiding Errors.&lt;/li&gt;
&lt;li&gt;Making decision based on wrong data.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Some Types of Validations
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Data Type Validation&lt;/strong&gt;
Validating emails, numeric, IPs, URL an so on. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Null-ability Validation&lt;/strong&gt;
Checking data if null or not selected.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Range Validation&lt;/strong&gt;
Validate whether input data falls within a predefined range.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Consistency Validation&lt;/strong&gt;
Confirms the data has been entered in a logically consistent way. For example, date is not in the future or password is follow the predefined rules.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Uniqueness Validation&lt;/strong&gt;
Ensures that an item is not entered multiple times into a database.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Length Validation&lt;/strong&gt;
Ensures that the appropriate number of characters are entered into the field.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Issue
&lt;/h1&gt;

&lt;p&gt;Although data Validation is a critical step in any data workflow, but also it may slow down the developing time and my be boring for some of us because of having to redo it in every application.&lt;/p&gt;

&lt;p&gt;We can save our developing time and make it less boring by using one the data validation libraries a available online to be installed and used.&lt;/p&gt;

&lt;p&gt;In the fallowing example I will use DEFC.Util.DataValidation library as an example of those libraries. this library is available on nuget.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="n"&gt;Install&lt;/span&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;Package&lt;/span&gt; &lt;span class="n"&gt;DEFC&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Util&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;DataValidation&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;Version&lt;/span&gt; &lt;span class="m"&gt;1.0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Example
&lt;/h2&gt;

&lt;p&gt;Console application with full example available at &lt;a href="https://github.com/AminaElsheikh/DEFC.Util.DataValidationExamples" rel="noopener noreferrer"&gt;the GitHub repository&lt;/a&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;DEFC.Util.DataValidation&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;System.Text.RegularExpressions&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
C#
 public static void Validator()
        {           
            //Sample of data type validator
            bool IsValidAlphanumeric= DataType.IsAlphanumeric("Foo1234");
            bool IsValidGUID = DataType.IsGUID("am I a GUID");
            bool IsValidIPv4 = DataType.IsIPv4("127.0.0.1");
            bool IsValidURL = DataType.IsURL("https://www.nuget.org");
            //Sample of math validator
            bool IsValidNegative = Math.IsNegative(-1);
            bool IsValidEven = Math.IsEven(9);
            //Sample of comparison validator
            bool IsBetween = Comparison.IsBetween(4,2,10);
            bool IsLessThanOrEqual = Comparison.IsLessThanOrEqual(12,3);
            //Sample of SQL Injection validator
            bool HasSQLInjection = SQLInjection.IsExists("' or 1=1");
            //Sample of Regular Expression validator
            bool IsValidExpression = RegularExpression.IsMatch("Foo1234",new Regex("[a-zA-Z0-9]*$"));
            //Sample of Password validator
            bool Isvalid = Password.ValidatRules(new PasswordRules() 
                                                {
                                                 Password="Foo@123",
                                                 HasUpper=true,
                                                 HasLower=true,
                                                 HasDigit=true,
                                                 HasLength=true,
                                                 passwordMinLength=6,
                                                 HasSymbols=true,
                                                 symbols="@,&amp;amp;"
                                                });
        }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>datatype</category>
      <category>validation</category>
      <category>data</category>
    </item>
  </channel>
</rss>
