From 854129fe139b636c0922da24de6a658b5a58804c Mon Sep 17 00:00:00 2001 From: "emre.kartal" Date: Wed, 1 Mar 2023 17:41:50 +0100 Subject: [PATCH] Add new Entity and relation (Foreign Key) --- .../Mapper/enums/ChampionClassMapper.cs | 69 +++++++++++++++++- .../Sources/MyFlib/DataBase.db | Bin 24576 -> 57344 bytes .../Sources/MyFlib/DataSeeder.cs | 10 ++- .../Sources/MyFlib/Entities/ChampionEntity.cs | 5 +- .../MyFlib/Entities/LargeImageEntity.cs | 2 +- .../Sources/MyFlib/Entities/Rune.cs | 26 +++++++ .../Sources/MyFlib/Entities/SkinEntity.cs | 4 + .../MyFlib/Entities/enums/RuneFamilyEntity.cs | 15 ++++ .../Sources/MyFlib/LolDbContext.cs | 19 +++-- .../Sources/Tests/UT_EF/ChampionsTest.cs | 30 +++++--- 10 files changed, 152 insertions(+), 28 deletions(-) create mode 100644 src/EntityFramework_LoL/Sources/MyFlib/Entities/Rune.cs create mode 100644 src/EntityFramework_LoL/Sources/MyFlib/Entities/enums/RuneFamilyEntity.cs diff --git a/src/EntityFramework_LoL/Sources/ApiLol/Mapper/enums/ChampionClassMapper.cs b/src/EntityFramework_LoL/Sources/ApiLol/Mapper/enums/ChampionClassMapper.cs index c0c52ed..9f4d332 100644 --- a/src/EntityFramework_LoL/Sources/ApiLol/Mapper/enums/ChampionClassMapper.cs +++ b/src/EntityFramework_LoL/Sources/ApiLol/Mapper/enums/ChampionClassMapper.cs @@ -7,11 +7,74 @@ namespace ApiLol.Mapper { public static ChampionClassDto ToDto(this ChampionClass championClass) { - return (ChampionClassDto) championClass; + if (championClass == ChampionClass.Unknown) + { + return ChampionClassDto.Unknown; + } + if (championClass == ChampionClass.Assassin) + { + return ChampionClassDto.Assassin; + } + if (championClass == ChampionClass.Fighter) + { + return ChampionClassDto.Fighter; + } + if (championClass == ChampionClass.Mage) + { + return ChampionClassDto.Mage; + } + if (championClass == ChampionClass.Marksman) + { + return ChampionClassDto.Marksman; + } + if (championClass == ChampionClass.Support) + { + return ChampionClassDto.Support; + } + if (championClass == ChampionClass.Tank) + { + return ChampionClassDto.Tank; + } + else + { + return ChampionClassDto.Unknown; + } + } public static ChampionClass ToModel(this ChampionClassDto championClass) - { - return (ChampionClass) championClass; + { + if (championClass == ChampionClassDto.Unknown) + { + return ChampionClass.Unknown; + } + if (championClass == ChampionClassDto.Assassin) + { + return ChampionClass.Assassin; + } + if (championClass == ChampionClassDto.Fighter) + { + return ChampionClass.Fighter; + } + if (championClass == ChampionClassDto.Mage) + { + return ChampionClass.Mage; + } + if (championClass == ChampionClassDto.Marksman) + { + return ChampionClass.Marksman; + } + if (championClass == ChampionClassDto.Support) + { + return ChampionClass.Support; + } + if (championClass == ChampionClassDto.Tank) + { + return ChampionClass.Tank; + } + else + { + return ChampionClass.Unknown; + } } } } diff --git a/src/EntityFramework_LoL/Sources/MyFlib/DataBase.db b/src/EntityFramework_LoL/Sources/MyFlib/DataBase.db index f1405c5c7719449496b283a6c631ae5013545dc4..9ff30fad1af2ff6c5cb16e904d7019574d8ff427 100644 GIT binary patch literal 57344 zcmeI*Pi))P9S3keQld;dGIvP{ujoPxD;h6lK#`PbVHh@wB0H^$?8)*L9}0o98Aq%B zxS|Bq*k#Gu9d_QZbAerlU6=Dt#Rdc@cGzK;ZaWk`^^_LaFzh`_l&wGZydFBo{W5rx zNWS;@-skryhfkut`~7Nb5ULM){Z24YP3|ikA>4OVmE*V~O{+9zXhraWFg6m z3!aPI-LL;Nn|;Cw*&{A{wEBVk+sr%j|1PKjyC47o2tWV=*Hj?;B>i_yAt$ZwVfc3C zeslNDRyS%^I>Av`IgD3U-MZ&AJhf6Qd-v7cY@VFDT~l*$&YXHXH!hjmpcVhZStF0u z&(z#*M@{!(&^d1Px?XqC8l1$(pqp@5zlf%)S?0B=)6#+o(I0T0_n4yv_m<7ul&-?m6{+^>uIm)p6-^7#;Lm z#{;T3Q%RDeadJ%Sr&W2cdG*O5lD$c9k`N@7&{mAIoNbGrv}F>y`5@+0f4lBgUaPTY zE{uv=_k6GJ)m(2^odhk8VC9ewmgS8*SyB1+8sXxoMQ^p~{|uYKaL|j_#~RK2NM+^m zkC!uwqL6pZM83=5yV25|dzT&Le`04PK9_ps;M{=h^jilsBJ@nE&V?g6WzLJ&d@$%4 zS`GU23}vV3D2k`!bvhDB#<=M$tlNaK2d?wpZV?>9;#V5v@G7F-#;LJ*feW}%(sXEzn zLEzkW5Yh2)-l>%Eo|j=Jc9XV$k@4F}iOQWjWIqnc_{@sJw}xT&Ae>oEPlab@=j|?i z*Lszf+>k#bYb?w^`$=4^tpz=`-U>b@m$Dl^Q+XJ+IbC223f4!cA*tG|^M#(fxEr zv2F5rJMKoa>G}6sNBw}kRY%`#MT1`dWZ_1Bx&Ah4W&CbbW!oj|)-!*dl**pcSm@mxdA=7zG zW4<2t!M-5>hLis$|A9VXfdB*`009U<00Izz00bZa0SG|g|0M7=!6D~Q2MANU=Vk)< zmjp+elrC5^lK|}Ve_sBClb_KCED(SI1Rwwb2tWV=5P$##AOHafTnm8|FL1KDLK6^a`0sj#u!#f?3df z-O6j0Rq(V@!PYfnt7I2SuD#`!iq6A+OEA-!y){~bIF`R zE5$tRisjpyM?2yhw&nVUIlj&}NoJ4E2@uKLbjpUaWoYHRO^;%iJ#EV=7PL(-U$7jz zO#5Sx=Ltl1|Gy}&aPnW|-^o9h-;gc3f&~H)fB*y_009U<00Izz00ba#eFbg{d*m`R z2V$J@5)%e#mhm!^1SyvBGIIk0%Xpb70sa+X?^5#sqx=8gG~`~T?!76?E9 z0uX=z1Rwwb2tWV=5P$##o(F-i3PrMbrhvaGp}Oh*HI6HPH+?oFOc-hio}(A z!*={_fCu5wZ}r3V(dYjka`GqghhJ(xbRGf_fB*y_009U<00Izz00bcLJPWJ}>*RD& zfR}}rrL&U&qwD`qIr(4mr?i{w>i{gV%@R#ZG-YT?(S!v85P$##AOHafKmY;|fB*y_ z0D-F^aM|zwrv#4hf)HQhvzD`KeRiEM(!{RyZ_vd44gi}6SfweM3!pEtKmY;|fB*y_ z009U<00Izz00ba#^#sxaA$&R|NJL~0DfS?+2YUT4Nu$sIpKqMbgO(4w9T2l0edvB!cMB zfZ!%X-cZ~eT*V<%wvGjLaVQQQ#LY!0xa&Jxx+vK9_;~-m-=FV$(*tRG0B38t0suf3 zNS&&6?DupEEuflTUx&}{^5gX3(yd|G?eLeG5`T!A zB3t6dpT}pD@cy7v?S;cf{b+Z5zLEIPbdh)Q2DdY-{4HMPcQUtSLzVNvI)9hG%zvO| zO#%Sgq9HK+p^ds5cf>I;TC@WLOm|+W)oaJqRqjRySR%;`nMzv}%q+4ae7gE3kCa zVYcr2%-7Aj;~A_T*p_cAF_Dw#WI0wRh7b-C0`ZSXLgOJRU6UHx|0Kq~fGhyyWS-jo zO6Z_3snQA*mjs?WFUKqmn}B>E`=mq4_!s_!U*j$|#m8R7dxoYo^9Z2}nXwa&ACG0K zD$SKR Skills { get; set; } + public LargeImageEntity Image { get; set; } + + [ForeignKey("Image")] + public int ImageId { get; set; } } } diff --git a/src/EntityFramework_LoL/Sources/MyFlib/Entities/LargeImageEntity.cs b/src/EntityFramework_LoL/Sources/MyFlib/Entities/LargeImageEntity.cs index 6fa04cf..5882826 100644 --- a/src/EntityFramework_LoL/Sources/MyFlib/Entities/LargeImageEntity.cs +++ b/src/EntityFramework_LoL/Sources/MyFlib/Entities/LargeImageEntity.cs @@ -11,7 +11,7 @@ namespace MyFlib { [Key] - public int ImageId { get; set; } + public int Id { get; set; } public string Base64 { get; set; } } diff --git a/src/EntityFramework_LoL/Sources/MyFlib/Entities/Rune.cs b/src/EntityFramework_LoL/Sources/MyFlib/Entities/Rune.cs new file mode 100644 index 0000000..5690737 --- /dev/null +++ b/src/EntityFramework_LoL/Sources/MyFlib/Entities/Rune.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace MyFlib +{ + public class Rune + { + [Key] + [MaxLength(256)] + public string Name { get; set; } + + [Required] + [MaxLength(500)] + public string Description { get; set; } + public SkillTypeEntity SkillType { get; set; } + public LargeImageEntity Image { get; set; } + + [ForeignKey("Image")] + public int ImageId { get; set; } + } +} diff --git a/src/EntityFramework_LoL/Sources/MyFlib/Entities/SkinEntity.cs b/src/EntityFramework_LoL/Sources/MyFlib/Entities/SkinEntity.cs index 772e162..c16b4c8 100644 --- a/src/EntityFramework_LoL/Sources/MyFlib/Entities/SkinEntity.cs +++ b/src/EntityFramework_LoL/Sources/MyFlib/Entities/SkinEntity.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -21,5 +22,8 @@ namespace MyFlib public float Price { get; set; } public LargeImageEntity Image { get; set; } + [ForeignKey("Image")] + public int ImageId { get; set; } + } } diff --git a/src/EntityFramework_LoL/Sources/MyFlib/Entities/enums/RuneFamilyEntity.cs b/src/EntityFramework_LoL/Sources/MyFlib/Entities/enums/RuneFamilyEntity.cs new file mode 100644 index 0000000..f76c708 --- /dev/null +++ b/src/EntityFramework_LoL/Sources/MyFlib/Entities/enums/RuneFamilyEntity.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace MyFlib.Entities.enums +{ + enum RuneFamilyEntity + { + Unknown, + Precision, + Domination + } +} diff --git a/src/EntityFramework_LoL/Sources/MyFlib/LolDbContext.cs b/src/EntityFramework_LoL/Sources/MyFlib/LolDbContext.cs index e507575..3291f49 100644 --- a/src/EntityFramework_LoL/Sources/MyFlib/LolDbContext.cs +++ b/src/EntityFramework_LoL/Sources/MyFlib/LolDbContext.cs @@ -27,22 +27,21 @@ namespace MyFlib } protected override void OnModelCreating(ModelBuilder modelBuilder) { - var image1 = new LargeImageEntity { ImageId = 1, Base64 = "image1" }; - var image2 = new LargeImageEntity { ImageId = 2, Base64 = "image2" }; + var image1 = new LargeImageEntity { Id = 1, Base64 = "empty" }; + var image2 = new LargeImageEntity { Id = 2, Base64 = " " }; modelBuilder.Entity().HasData(image1, image2); - modelBuilder.Entity().Property("ImageId"); - modelBuilder.Entity().HasKey(e => e.Id); + modelBuilder.Entity().Property(e => e.Id).ValueGeneratedOnAdd(); modelBuilder.Entity().HasData( - new { Id = Guid.Parse("{4422C524-B2CB-43EF-8263-990C3CEA7CAE}"), Name = "Akali", Class = ChampionClassEntity.Assassin, Bio = "", Icon = "", Image = "empty" }, - new { Id = Guid.Parse("{A4F84D92-C20F-4F2D-B3F9-CA00EF556E72}"), Name = "Aatrox", Class = ChampionClassEntity.Fighter, Bio = "", Icon = "", Image = "empty" }, - new { Id = Guid.Parse("{AE5FE535-F041-445E-B570-28B75BC78CB9}"), Name = "Ahri", Class = ChampionClassEntity.Mage, Bio = "", Icon = "", Image = "empty" }, - new { Id = Guid.Parse("{3708dcfd-02a1-491e-b4f7-e75bf274cf23}"), Name = "Akshan", Class = ChampionClassEntity.Marksman, Bio = "", Icon = "", Image = "empty" }, - new { Id = Guid.Parse("{7f7746fa-b1cb-49da-9409-4b3e6910500e}"), Name = "Bard", Class = ChampionClassEntity.Support, Bio = "", Icon = "", Image = "empty" }, - new { Id = Guid.Parse("{36ad2a82-d17b-47de-8a95-6e154a7df557}"), Name = "Alistar", Class = ChampionClassEntity.Tank, Bio = "", Icon = "", Image = "empty" } + new { Id = Guid.Parse("{4422C524-B2CB-43EF-8263-990C3CEA7CAE}"), Name = "Akali", Class = ChampionClassEntity.Assassin, Bio = "", Icon = "", ImageId = 1 }, + new { Id = Guid.Parse("{A4F84D92-C20F-4F2D-B3F9-CA00EF556E72}"), Name = "Aatrox", Class = ChampionClassEntity.Fighter, Bio = "", Icon = "", ImageId = 2 }, + new { Id = Guid.Parse("{AE5FE535-F041-445E-B570-28B75BC78CB9}"), Name = "Ahri", Class = ChampionClassEntity.Mage, Bio = "", Icon = "", ImageId = 1 }, + new { Id = Guid.Parse("{3708dcfd-02a1-491e-b4f7-e75bf274cf23}"), Name = "Akshan", Class = ChampionClassEntity.Marksman, Bio = "", Icon = "", ImageId = 1 }, + new { Id = Guid.Parse("{7f7746fa-b1cb-49da-9409-4b3e6910500e}"), Name = "Bard", Class = ChampionClassEntity.Support, Bio = "", Icon = "", ImageId = 1 }, + new { Id = Guid.Parse("{36ad2a82-d17b-47de-8a95-6e154a7df557}"), Name = "Alistar", Class = ChampionClassEntity.Tank, Bio = "", Icon = "", ImageId = 1 } ); modelBuilder.Entity().HasData( diff --git a/src/EntityFramework_LoL/Sources/Tests/UT_EF/ChampionsTest.cs b/src/EntityFramework_LoL/Sources/Tests/UT_EF/ChampionsTest.cs index fd66059..723a3a6 100644 --- a/src/EntityFramework_LoL/Sources/Tests/UT_EF/ChampionsTest.cs +++ b/src/EntityFramework_LoL/Sources/Tests/UT_EF/ChampionsTest.cs @@ -15,10 +15,20 @@ namespace UT_EF using (var context = new LolDbContext(options)) { - ChampionEntity sylas = new ChampionEntity { Name = "Sylas", Class = ChampionClassEntity.Assassin, Bio = "", Icon = "", Image = "" }; - ChampionEntity hecarim = new ChampionEntity { Name = "Hecarim", Class = ChampionClassEntity.Fighter, Bio = "", Icon = "", Image = "" }; - ChampionEntity yuumi = new ChampionEntity { Name = "yuumi", Class = ChampionClassEntity.Mage, Bio = "", Icon = "", Image = "" }; + ChampionEntity sylas = new ChampionEntity { Name = "Sylas", Class = ChampionClassEntity.Assassin, Bio = "", Icon = "", ImageId = 1 }; + ChampionEntity hecarim = new ChampionEntity { Name = "Hecarim", Class = ChampionClassEntity.Fighter, Bio = "", Icon = "", ImageId = 1 }; + ChampionEntity yuumi = new ChampionEntity { Name = "yuumi", Class = ChampionClassEntity.Mage, Bio = "", Icon = "", ImageId = 1 }; + + // test contrainte + ChampionEntity errorName = new ChampionEntity + { + Name = "c1832f35-f909-422d-a1fb-e0b79a62f562-fa7c5fe2-89b7-432e-9e0f-a5736445b381-3f75c0f8-de2e-4cf4-82d2-3d24411f6422-6b7e9196-3664-4813-b971-e9cc08a4b255-c1832f35-f909-422d-a1fb-e0b79a62f562-fa7c5fe2-89b7-432e-9e0f-a5736445b381-3f75c0f8-de2e-4cf4-82d2-3d24411f6422-6b7e9196-3664-4813-b971-e9cc08a4b255", + Class = ChampionClassEntity.Mage, + Bio = "", + Icon = "", + ImageId = 1 + }; context.Champions.AddRange(sylas, hecarim, yuumi); context.SaveChanges(); } @@ -39,9 +49,10 @@ namespace UT_EF using (var context = new LolDbContext(options)) { - ChampionEntity sylas = new ChampionEntity { Name = "Sylas", Class = ChampionClassEntity.Assassin, Bio = "", Icon = "", Image = "" }; - ChampionEntity hecarim = new ChampionEntity { Name = "Hecarim", Class = ChampionClassEntity.Fighter, Bio = "", Icon = "", Image = "" }; - ChampionEntity yuumi = new ChampionEntity { Name = "yuumi", Class = ChampionClassEntity.Mage, Bio = "", Icon = "", Image = "" }; + + ChampionEntity sylas = new ChampionEntity { Name = "Sylas", Class = ChampionClassEntity.Assassin, Bio = "", Icon = "", ImageId = 1 }; + ChampionEntity hecarim = new ChampionEntity { Name = "Hecarim", Class = ChampionClassEntity.Fighter, Bio = "", Icon = "", ImageId = 1 }; + ChampionEntity yuumi = new ChampionEntity { Name = "yuumi", Class = ChampionClassEntity.Mage, Bio = "", Icon = "", ImageId = 1 }; context.Champions.AddRange(sylas, hecarim, yuumi); context.SaveChanges(); @@ -84,9 +95,10 @@ namespace UT_EF using (var context = new LolDbContext(options)) { - ChampionEntity sylas = new ChampionEntity { Name = "Sylas", Class = ChampionClassEntity.Assassin, Bio = "", Icon = "", Image = "" }; - ChampionEntity hecarim = new ChampionEntity { Name = "Hecarim", Class = ChampionClassEntity.Fighter, Bio = "", Icon = "", Image = "" }; - ChampionEntity yuumi = new ChampionEntity { Name = "yuumi", Class = ChampionClassEntity.Mage, Bio = "", Icon = "", Image = "" }; + + ChampionEntity sylas = new ChampionEntity { Name = "Sylas", Class = ChampionClassEntity.Assassin, Bio = "", Icon = "", ImageId = 1 }; + ChampionEntity hecarim = new ChampionEntity { Name = "Hecarim", Class = ChampionClassEntity.Fighter, Bio = "", Icon = "", ImageId = 1 }; + ChampionEntity yuumi = new ChampionEntity { Name = "yuumi", Class = ChampionClassEntity.Mage, Bio = "", Icon = "", ImageId = 1 }; context.Champions.AddRange(sylas, hecarim, yuumi); context.SaveChanges();