From 65338a591116fcd86c56d4bc9976950823e5a140 Mon Sep 17 00:00:00 2001 From: Mobin Valikhani Date: Wed, 1 Jan 2025 23:07:23 +0330 Subject: [PATCH] config: config nuget package --- .gitignore | 3 +- README.md | 37 ------------------ Valobtify.Swagger.FastEndpoints/Extensions.cs | 2 +- .../Valobtify.Swagger.FastEndpoints.csproj | 22 +++++++++++ Valobtify_Logo.png | Bin 0 -> 28742 bytes 5 files changed, 25 insertions(+), 39 deletions(-) create mode 100644 Valobtify_Logo.png diff --git a/.gitignore b/.gitignore index 6178290..85cae8f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ /.idea/ /Valobtify.Swagger.FastEndpoints/obj -/Valobtify.Swagger.FastEndpoints/bin \ No newline at end of file +/Valobtify.Swagger.FastEndpoints/bin +/.vs/Valobtify.Swagger.FastEndpoints diff --git a/README.md b/README.md index 11209bb..e69de29 100644 --- a/README.md +++ b/README.md @@ -1,37 +0,0 @@ -[![NuGet Package](https://img.shields.io/nuget/v/Valobtify.EntityFrameworkCore)](https://www.nuget.org/packages/Valobtify.EntityFrameworkCore/) - -### Overview - -`Valobtify.EntityFrameworkCore` is an extension of the `Valobtify` library that simplifies the configuration and persistence of single-value objects in Entity Framework Core. It automates the application of data annotations like `MaxLength` and handles type conversions, making your value objects database-ready with minimal setup. - ---- - -### Installation - -To install the `Valobtify.EntityFrameworkCore` package, run the following command in your terminal: - -```bash -dotnet add package Valobtify.EntityFrameworkCore -``` - -Ensure you have the required .NET SDK installed. - ---- - -### Setup Single-Value Objects - -To configure single-value objects in your Entity Framework Core `DbContext`, override the `OnModelCreating` method as shown below: - -```csharp -protected override void OnModelCreating(ModelBuilder modelBuilder) -{ - modelBuilder.SetupSingleValueObjects(); - - base.OnModelCreating(modelBuilder); -} -``` - -**Explanation:** -- `SetupSingleValueObjects` automatically applies the necessary configurations for your single-value objects, including data annotations and type conversions. -- By calling this method, you ensure your value objects are properly mapped to the database schema. - diff --git a/Valobtify.Swagger.FastEndpoints/Extensions.cs b/Valobtify.Swagger.FastEndpoints/Extensions.cs index 676a2fd..c2cc9f6 100644 --- a/Valobtify.Swagger.FastEndpoints/Extensions.cs +++ b/Valobtify.Swagger.FastEndpoints/Extensions.cs @@ -8,7 +8,7 @@ namespace Valobtify.Swagger.FastEndpoints; public static class Extensions { - public static IEnumerable GetSingleValueObjectTypes(this Assembly assembly) + internal static IEnumerable GetSingleValueObjectTypes(this Assembly assembly) { var baseType = typeof(SingleValueObject<,>); diff --git a/Valobtify.Swagger.FastEndpoints/Valobtify.Swagger.FastEndpoints.csproj b/Valobtify.Swagger.FastEndpoints/Valobtify.Swagger.FastEndpoints.csproj index 51eb7bd..c510675 100644 --- a/Valobtify.Swagger.FastEndpoints/Valobtify.Swagger.FastEndpoints.csproj +++ b/Valobtify.Swagger.FastEndpoints/Valobtify.Swagger.FastEndpoints.csproj @@ -4,8 +4,30 @@ net9.0 enable enable + Integrate Valobtify with Swagger and FastEndpoints + LICENCE + Valobtify.EntityFrameworkCore + README.md + https://github.com/Valobtify/Valobtify.Swagger.FastEndpoints + Valobtify_Logo.png + 1.0.0 + + + True + \ + + + True + \ + + + True + \ + + + diff --git a/Valobtify_Logo.png b/Valobtify_Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..9a08f631568098b5a6da5c0c88996ed9c97a636d GIT binary patch literal 28742 zcmeFZ_dnKu8$bLe4XH##$;gPZ(vVF>W|2)+Ms`+6gob1!TOyK`z4uP`%*e{fNcPIg zx{ueXPuJ(VzTf)~xF3)EhwJgVoag&|jblEK=W)FAkh>**_~6Nd7=|5|ln|B2usy-( ze+Tx#CxJwVo#8)(mJ(_<7)C^j{)gAr@4Sg&beN>*RmF$l)BP@%;hpcsH|7`$?_`p9 zR3ERcR#i3?>9taoOdnd*4bCMKpm>#b@I+JK!DA}fr$xm`trspUO!b@Iqj*Mgkyf>Hngcn{R+LDCY;Ll!}(qK+30E6 zhgOB^^)I+D9V6^LsibfQ+-T;VXnf5 zJZevevWK}}2yM(aIoar?J8@y0tnOYYd%zU=2rPizU&w7d-gN!imj~3Iu@`ErlxyR~ zti9wIVRctG9)(Me2DwIB(;}xw@v7u2G(ycHHf-aqPr(n%_mu_q`1eTHH41wgM1(7x zp(R_9#D^~mE-})-CStm1!4k~-gXdOQ`UOJx)M!1n@pvQ03>|m0>JQfu9@`5=7kbz< z_Ml(nU%hru+<>+P1d>zP{X*CHKy)g6>}q)aoGE411!B1b-pj{3=* zv60|^86w9<@$wov(%QkjHY6;;AtF)e8K+lI3ox<rQX1y0!p zpx>1HCx`Sr4!M*4OusU#%KCoglxun|9sYbY^*J(%3mHC6-Gb&#CoD$S26(^mFrS| zp+?~%I=~SkoRTpiQryG!F`9`g@?=0a>A5zTYY#T!%2LJs;l2-A`v#c#7vqH zNM%u?mYP_4<7vY+QguzXP)iZ{@2+;2V4XFQ^M1#f{enj~6#ReloUIXe7N5A(pfuKY zxvI@7yhdzv=S%ZyouOCa#I|Bk9ibKAG_5v553nn7diO;5R7Q zGH`!JLThEm;6mvBoa-<1W5AZ$&(OOhy{nXNCaW8+CHH6JZ1dRzzhzVV`O`Smb0^|M z!KEFcfVv09?sA++tt5VUokwYodMHX|J0vCNubeykk>joy+D`ePjG_KLeR-irQ~94C z5ntddI=>t$^TYQZ)~P$ebL(BB7AvVT(RXX}qF#f}WfkefL{)yIF<<+NFK5^1U)jed zMJw=ohB1liOP>kgO(qvfQEl!ovsM-TnnYlkQT^jg!hm{BJ&Gsi#~Y=7)K*klzt5B9 z_n|6br?-Wj7+z6yu?4$B09hR7=*&&hl)9oKk;(Rv8ridDN~@^Ut>R0~=YEV=L1aDt zibDBpa5%P+AQ2-!n{Qvl)|dUZ6FIyN34Z&D^@sD19cJqcd%V`q1_kIYX|eI**(qm7 zY27y}P`YQ*t%XjmpQOWcI&HO>CBwOSFS#2$rq0Hj?2ZdmqojKkM9GdU)!oSm=T9E@ zecAD2Y_H}EKNa{LoiL>zIf)+x`49)*M&`(>Oli?l{}2kB(2dd!SB(L=Te#@9$a4Oj zU%bI5pbD*oENxujoBai8F-Z%aGRWm*N

%~A7B5Eq+RE;;7|9?EEg7^H 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