MS_EntityFrameworkConcerns - NetDevInfraWGinOSSConsortium/NetDevInfraWiki GitHub Wiki
- æ»ãïŒEntity FrameworkïŒ
- Entity Framework ã®æžå¿µ
- Entity Framework ã®èª¿æ»
Entity Frameworkãå©çšããäžã§ã®æžå¿µããŸãšããŠã¿ãã
è£è¶³ïŒæ¬ããŒãžã®èªã¿æ¹ïŒ: æ¬ããŒãžã¯ EF6 æä»£ã®è©äŸ¡ã§ããã
ãADO.NET vs ORM (Entity Framework, Dapper)ãã®
ORM åŽã«å¯Ÿããæ¹å€ããã詳ããå±éãããã®ã
ææã®å€ãã¯çŸåšãæç«ãã ORM äžè¬ã®è«ç¹ã ãã
EF Coreã§æ¹åãããç¹ãããããã
ç¯ããšã«ãçŸåšã©ããããè£è¶³ããã
- EntityFrameworkïŒCodeFirstïŒã§ Join ã詊ããŠã¿ã : æ¥æã²ãŒã ã¯ãªãšãŒã¿ã®æ¥èš
http://kazenetu.exblog.jp/19246594/ - [Entity Framework] LINQ ã§ JOIN å¥ã䜿çšããŠè€æ°ããŒãã«ããããŒã¿ãååŸãã: ãã SE ã®ã€ã¶ãã
http://fnya.cocolog-nifty.com/blog/2014/01/entity-framew-6.html - [Entity Framework] LINQ ã§ LEFT JOIN å¥ã䜿çšããŠè€æ°ããŒãã«ããããŒã¿ãååŸãã: ãã SE ã®ã€ã¶ãã
http://fnya.cocolog-nifty.com/blog/2014/01/entity-framew-7.html
- Entity Framework ã§ Join ã䜿ããã«å
éšçµåãã - Qiita
http://qiita.com/keidrumfreak/items/f15d36bfdb35ca2dc6b0 - [Entity Framework] LINQ ã§ JOIN çã䜿ããã«è€æ°ããŒãã«ããããŒã¿ãååŸãã: ãã SE ã®ã€ã¶ãã
http://fnya.cocolog-nifty.com/blog/2014/01/entity-framew-5.html
è£è¶³ïŒç¯ã®æå³ïŒ: ãéèšåŠçã®ãµããŒããã¯èŠåºãã®ã¿ã§æ¬æãç¡ãã
æèãããGROUP BYã䌎ãéèšã LINQ ã§è¡šçŸããããããšãã
æžå¿µã瀺ããŠãããšèªãããEF Core ã§ã¯ã
GroupByã®ç¿»èš³ãé·ãå¶çŽãããŠããã
ç¹ã« EF Core 3.0 ã§ã¯ç¿»èš³ã§ããªãGroupByã
å®è¡æäŸå€ã«ãªãã±ãŒã¹ãå€ãã£ã
ïŒãã以åã¯æé»ã«ã¯ã©ã€ã¢ã³ãåŽã§è©äŸ¡ãããŠããïŒã
EF Core 7 以éã§ç¿»èš³å¯èœãªç¯å²ãããªãåºãã£ãŠãããã
è€éãªéèšã¯ç SQL ããã¥ãŒã«éããã®ãçŸåšãç¡é£ã§ããã
å šäœçã«ã
- context ãžã®ã¢ã¯ã»ã¹
- åŒã³åºã LINQ ã¡ãœãã
ãã
- ã©ããã SQL ãå®è¡ãããã®ãïŒ
- å éšåäœã¯ã©ã®ããã«ãªã£ãŠããã®ãïŒ
ãªã©ããã©ãã¯ããã¯ã¹åãããŠããããã
Entity Framework èªäœã®ä»æ§ã«ç²ŸéããŠããªããšã
ãã€ããã©ãŒãã³ã¹ãªå®è£ ãããããšãã§ããªãã
ãšããåé¡ãããã
è£è¶³ïŒãã©ãã¯ããã¯ã¹æ§ã¯ãèŠãã°ãç·©åã§ããïŒ: ãã®ææã®æ¬è³ªã¯
ãèŠããªããããšãªã®ã§ããã°ãåºãã°å€§å¹ ã«æ¹åããã
- EF Core:
optionsBuilder.LogTo(Console.WriteLine)
ïŒéçºæã®ã¿EnableSensitiveDataLogging()ã§ãã©ã¡ãŒã¿å€ãåºãïŒ- EF6:
context.Database.Log = Console.Write;- DB åŽ: SQLãããã¡ã€ã©ïŒSQLãã¬ãŒã¹ïŒã
ã¯ãšãª ã¹ãã¢ïŒSQL Server ã®ãã°ïŒãã ãããæžãã LINQ ããçºè¡ããã SQL ãäºæž¬ã§ããå¿ èŠãããããšãã
æ¬è³ªçãªé£ããã¯æ®ãããã®ç¹ã¯çŸåšã ORM å šè¬ã®åŒ±ç¹ã§ããã
foreach ã§ããŒã¿ã¢ã¯ã»ã¹ããå Žåãªã©ã
æ€çŽ¢ SQL ãæ€çŽ¢ããŒãå°åœ±ã®ååãæå®ããªãã®ã§æ§èœçã«åé¡ã«ãªãã
è£è¶³:
context.YYYYYsãçŽæ¥foreachãããš
SELECTïŒå šåã»å šè¡ïŒãçºè¡ãããã
çµã蟌ã¿ãšå°åœ±ã LINQ åŽã§æžãã°WHERE/ åæå®ã«ç¿»èš³ãããã// å šåã»å šè¡ foreach (var y in context.YYYYYs) { } // WHERE ãšåæå®ã«ç¿»èš³ããã var rows = await context.YYYYYs .Where(y => y.DeptId == deptId) .Select(y => new { y.Id, y.Name }) .ToListAsync();ã€ãŸããEF ãååãæå®ããªããã®ã§ã¯ãªãã
æå®ããããã«æžããŠããªããšããã®ãæ£ç¢ºãªãšããã§ããã
以äžã®æ§ãªææ®µã«ãããåŠç察象㮠Entity ãã¡ã¢ãªã«èµ·ãããŠããŸãã
ãã®å ŽåãToArray() ã¡ãœããã䜿ã£ãŠãã¯ããã«çµæã確å®ãããã
var YYYYYs = context.YYYYYs.ToArray();ãã®å ŽåãLoad() ã¡ãœããã䜿ã£ãŠãDbContext å
ã«ããŒã¿ããã£ãã·ã¥ãããã
context.YYYYYs.Load();ãã®åŸãcontext.YYYYYs ã«ã¢ã¯ã»ã¹ããŠã SQL ã¯å®è¡ãããªãã
ã©ã€ãã©ãªãããã€ããããïŒé MS 補ãNuGet ããã€ã³ã¹ããŒã«å¯èœïŒ
-
zzzprojects/EntityFramework.Extended · GitHub
https://github.com/zzzprojects/EntityFramework.Extended -
MikaelEliasson/EntityFramework.Utilities · GitHub
https://github.com/MikaelEliasson/EntityFramework.Utilities -
åè
- Entity Framework ã§ã¢ãããã¯ã€ã³ã¯ãªã¡ã³ã & äžæ¬æŽæ° | C#.NET vs VB.NET
http://csharpvbcomparer.blogspot.com/2015/04/net-ef-atomic-increment-and-bulk-update.html - Entity Framework ã§ããã«ã¯æŽæ°ããããã(ã»âã») - ããâããæ¥èš
http://d.hatena.ne.jp/machi_pon/20120202/1328187399
- Entity Framework ã§ã¢ãããã¯ã€ã³ã¯ãªã¡ã³ã & äžæ¬æŽæ° | C#.NET vs VB.NET
è£è¶³ïŒææ°åïŒäžæ¬æŽæ°ã¯æšæºæ©èœã«ãªã£ãïŒ: ãã®ç¯ã®æžå¿µã¯ã
EF Core 7 ã§ExecuteUpdate/ExecuteDeleteã远å ãããããšã§è§£æ¶ããã
ãµãŒãããŒã㣠ã©ã€ãã©ãªãå ¥ããªããŠããSQL 1 çºã§äžæ¬åŠçã§ãããawait context.YYYYYs .Where(y => y.CreatedAt < threshold) .ExecuteDeleteAsync();ãªãããããã¯å€æŽè¿œè·¡ãçµç±ããªããã
SaveChangesã¯äžèŠã§ãããéã«ã¡ã¢ãªäžã®ãšã³ãã£ãã£ãšã¯
åæããªãç¹ã«æ³šæïŒEntity Frameworkåç §ïŒã
倧éã®æ¿å ¥ã¯çŸåšãSqlBulkCopyãæéã§ãã
ïŒSQL Server 倧éããŒã¿åŠçæã®æ§èœåé¡ïŒã
- LINQ to Objectã¯ãã¡ã¢ãªäžã§ã®åŠç
- LINQ to Entitiesã¯ãDBMS äžã§ã®åŠç
ãšãªãã
-
åºæ¬çã«ã¯ãLINQ to Objectãé«éã ãã
-
ã¹ãã¬ãŒãžãå¿ èŠãªå€§éããŒã¿åŠçã«ãªã£ãŠãããšã
LINQ to Entitiesã®æ¹ãé«éã«ãªãå¯èœæ§ãããã
è£è¶³ïŒæ¯èŒã®åæïŒ: ãLINQ to Object ãé«éããšããã®ã¯
æ¢ã«ã¡ã¢ãªäžã«ããããŒã¿ã«å¯ŸããæŒç®ã®è©±ã§ããã
DB äžã®ããŒã¿ãæ±ãå Žåã¯ã
- LINQ to Entities: DB åŽã§çµã蟌ã¿ãå¿ èŠãªè¡ã»åã ã転é
- LINQ to Objects: å šä»¶è»¢éããŠããã¡ã¢ãªäžã§çµã蟌ã¿
ãšãªããããéä¿¡éãš DB åŽã®ã€ã³ããã¯ã¹æŽ»çšã®å·®ã§
ã»ãŒåžžã« LINQ to Entities ãæå©ã§ãã
ïŒSQL Server ã®ã€ã³ããã¯ã¹ïŒã
åŠçãããå Žæã ãã§ãªããåŠççµæãç°ãªãããšãããã
- 以äžã¯ãDB åŽã§
Nameã§ãœãŒãïŒOrderByïŒãããã
context.YYYYYs.OrderBy(x => x.Name).ToArray()- 以äžã¯ DB ããããŒããããåŸãã¡ã¢ãªäžã§
Nameã§ãœãŒãïŒOrderByïŒãããã
context.YYYYYs.ToArray().OrderBy(x => x.Name)DBMS ã®ç
§åé åºãªã©ã®é¢ä¿ã«ããã
åŠçãããå Žæã«ãã£ãŠããœãŒãïŒOrderByïŒé ãç°ãªãããã§ããã
ç§»è¡ã¡ã¢ïŒèª€åïŒ: å ããŒãžã®
OrberByã¯OrderByã®èª€èšã
æ¬æäžã®èšè¿°ã䜵ããŠä¿®æ£ããã
è£è¶³ïŒãã®ææã¯éèŠïŒ: ããã¯æ§èœã§ã¯ãªãæ£ããã®åé¡ã§ããã
çŸåšãå®å šã«æç«ããã
- DB åŽ: ç §åé åºïŒäŸ
Japanese_XJIS_100_CI_ASïŒã«åŸã
â 倧æåå°æåãåºå¥ããªããå šè§åè§ãåºå¥ããªããªã©- ã¡ã¢ãªåŽ: .NET ã®
StringComparerïŒæ¢å®ã¯ã«ã«ãã£äŸåïŒã«åŸããããŒãžã³ã°ã¯ DB åŽã衚瀺é ã®åŸ®èª¿æŽã¯ã¡ã¢ãªåŽãã®ããã«
ãœãŒãã®å Žæãæ··åšãããšé åºãç Žç¶»ããã
ããŒãžã³ã°ïŒSkip/TakeïŒã䌎ãå Žåã¯ç¹ã«èŽåœçã§ã
åãè¡ã 2 ããŒãžã«åºããæ¬ ãããããã
AsNoTracking() ã¡ãœããã§ Collection ãååŸãããšã
Entity Statesã®ãã©ããã³ã°ãããªããªãã
var YYYYYs = context.YYYYYs.AsNoTracking().ToArray();ããã«ããã䜿çšããã¡ã¢ãªéãåæžã§ããã
è£è¶³: ã¡ã¢ãªã ãã§ãªãã倿Žè¿œè·¡ã®ããã®ã¹ãããã·ã§ããäœæã
çããããã CPU ãåæžã§ããåç §å°çšã®ã¯ãšãªã§ã¯äœæå·®ãåºãã
ãã ããAsNoTracking()ã§ååŸãããšã³ãã£ãã£ãUpdate()ãããš
å šåãæŽæ°å¯Ÿè±¡ã«ãªãç¹ã«æ³šæ
ïŒEntity Frameworkåç §ïŒã
EF Core ã§ã¯QueryTrackingBehavior.NoTrackingã§æ¢å®å€ã倿Žããããšãã§ããã
-
ã¯ã©ã¹å(+s) ãããŒãã«åã«ããããããã
-
ããããã£åãã«ã©ã åã«ããããããã
-
äž»ããŒã¯
idor ã¯ã©ã¹å +idãããã©ã«ãã -
åè
- Entity Framework Code First | densan-labs.net
http://densan-labs.net/tech/codefirst/index.html
- Entity Framework Code First | densan-labs.net
ã³ãŒããã¡ãŒã¹ãã®ããŒã¿ã¢ãã« ã¯ã©ã¹ã®å€æŽãããšã«ã
æ¢åã®ããŒã¿ãæ®ãããŸãŸããŒã¿ããŒã¹ã®ããŒãã«ã倿Žããæ©èœã
-
Entity Framework Code First Migrations
https://learn.microsoft.com/ja-jp/ef/ef6/modeling/code-first/migrations/ -
- ããŒã¿ããŒã¹ ãã€ã°ã¬ãŒã·ã§ã³ | densan-labs.net
http://densan-labs.net/tech/codefirst/migration.html
- ããŒã¿ããŒã¹ ãã€ã°ã¬ãŒã·ã§ã³ | densan-labs.net
ã³ãŒããã¡ãŒã¹ãã§ã¯èŠçŽã«åºã¥ã㊠Entity ãš Database ãçŽä»ããã
屿§ã«ããèŠçŽã
| é çª | 屿§å | 説æ |
|---|---|---|
| 1 | Table | Entity ãš Table éã®ãããã³ã° |
| 2 | Column | Entity ã® Property ãš Table ã® Column éã®ãããã³ã° |
| 3 | ComplexType | Entity ã®è€æ°ã® Property(Properties) ãš Table éã®ãããã³ã° ComplexType ã®è€æ°ã® Property(Properties) ã¯ãå¥ã® Table ã«åãåºãããã |
| 4 | Key | Entity ã® Property ã察å¿ãã Table ã® PrimaryKey ã«èšå®ããã |
| 5 | Required | Entity ã® Property ã«å¯Ÿå¿ãã Table ã® Column ã NOT NULL ã«èšå®ããã MVC ã® ModelMetadata ãšããŠæ€èšŒåŠçã«äœ¿çšãããã |
| 6 | MaxLength | Entity ã® Property ã«å¯Ÿå¿ãã Table ã® Column ã®ããŒã¿é·ãèšå®ããã MVC ã® ModelMetadata ãšããŠæ€èšŒåŠçã«äœ¿çšãããã |
| 7 | Index | Entity ã® Property ã«å¯Ÿå¿ãã Table ã® Column ã䜿çšããéã¯ã©ã¹ã¿åã»ã€ã³ããã¯ã¹ãäœæããã |
| 8 | NoMapped | Entity ã® Property ã Database ã«ãããããªãã |
ãã®ä»ãDbContext ãç¶æ¿ãã Context ã®ã³ã³ã¹ãã©ã¯ã¿ã§æ¥ç¶æååãæ±ºå®ã§ããã
ç§»è¡ã¡ã¢ïŒæ£èª€ïŒ: é çª 8 ã®å±æ§åã¯
NoMappedã§ã¯ãªãNotMappedãæ£ããã
ãŸããEF Core ã§ã¯[Index]屿§ã¯
äžææå»æ¢ãããã®ã¡ EF Core 5 ã§åŸ©æŽ»ããŠãã
ïŒ[Index(nameof(Prop))]ãšããŠã¯ã©ã¹ã«ä»äžïŒã
EF6 ã®æžãæ¹ïŒããããã£ã«ä»äžïŒãšã¯ç°ãªãã
ComplexType㯠EF Core ã§ã¯é·ãæªãµããŒãã§ã
EF Core 8 ã§è€ååïŒComplex TypesïŒãšããŠåå°å ¥ãããã
Fluent API ã«ããèŠçŽã
-
Fluent API ãš DbContext ã®æ©èœ ïŒ ïŒ IT
http://www.atmarkit.co.jp/fdotnet/ef4basic/ef4codefirst03/ef4codefirst03_01.html -
Entity Framework Fluent API - ããããã£ãšåã®æ§æ/ãããã³ã°
https://learn.microsoft.com/ja-jp/ef/ef6/modeling/code-first/fluent/types-and-properties
è£è¶³ïŒå±æ§ãš Fluent API ã®äœ¿ãåãïŒ: äž¡æ¹äœ¿ããå Žåã
Fluent API ãåªå ãããã
屿§ã¯ãšã³ãã£ã㣠ã¯ã©ã¹ã«æ°žç¶åã®ç¥èãæã¡èŸŒãããã
ãã¡ã€ã³ ã¢ãã«ãçŽç²ã«ä¿ã¡ããå Žåã¯
IEntityTypeConfiguration<T>ã«åé¢ããã®ãå®ç³ã§ããã
ãšã³ãã£ãã£éã®é¢é£ïŒã¢ãœã·ãšãŒã·ã§ã³ïŒã衚ãã
- x 察äžã¯ããªããžã§ã¯ãåç §ã䜿çšã
- x 察å€ã¯ã
ICollection<T>ã䜿çšã
è£è¶³ïŒé å»¶èªã¿èŸŒã¿ã®æ¢å®ãéãïŒ: EF6 ã¯
ããã²ãŒã·ã§ã³ ããããã£ãvirtualã«ãããšé å»¶èªã¿èŸŒã¿ãæ¢å®ã§æå¹ã ã£ããã
EF Core ã§ã¯æ¢å®ã§ç¡å¹ã§ãã
ïŒMicrosoft.EntityFrameworkCore.Proxiesãå°å ¥ããŠ
UseLazyLoadingProxies()ãåŒã¶ãšæå¹åã§ããïŒãé å»¶èªã¿èŸŒã¿ã¯ N+1 åé¡ã®äž»èŠå ã§ããããã
EF Core ã®æ¢å®ïŒæç€ºçãªIncludeïŒã®ã»ããå®å šåŽã«åããŠããã
-
æ§èœãšæè»æ§ãéèŠããããšã³ã¿ãŒãã©ã€ãºã®é åã§ã¯ã䜿ãé£ããšã®æ¹å€ãå€ãæš¡æ§ã
-
ããŒã«çã®ã¹ã¿ã³ãã¢ãã³ã®ããã°ã©ã ãæ å ±ç³»ã·ã¹ãã ãªã©ã® EUC ã«ãã
RAD éçºãªã©ã«ã¯ãããããå¯èœæ§ãããã -
ãŸããADO.NET ã¯æ¯ããæè¡ã§ããã®ã«å¯ŸããEntity Framework ã¯é²åã®äœå°ãããã
- Entity Framework ã®æŽå²ãæ¯ãè¿ã - kendik.net
http://kendik.hatenablog.com/entry/2013/05/24/033400 - Entity Framework ã®ããŒãžã§ã³å±¥æŽ
https://learn.microsoft.com/ja-jp/ef/ef6/what-is-new/past-releases
- Entity Framework ã®æŽå²ãæ¯ãè¿ã - kendik.net
-
ADO .NET Entity Framework Vote of No Confidence
http://efvote.wufoo.com/forms/ado-net-entity-framework-vote-of-no-confidence/ -
ADO.NET Entity Framework Taking Some Heat
http://www.infoq.com/news/2008/06/entity-framework-heat -
Is ORM (Linq, Hibernate...) really that useful - Stack Overflow
http://stackoverflow.com/questions/938524/is-orm-linq-hibernate-really-that-useful -
Entity Framework VS LINQ to SQL VS ADO.NET with stored procedures - Stack Overflow
http://stackoverflow.com/questions/2698151/entity-framework-vs-linq-to-sql-vs-ado-net-with-stored-procedures -
ããŒã¿ããŒã¹ ãã¡ãŒã¹ã æµã¿ã®æ³¢çŽ
https://ogacha.wordpress.com/tag/%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9-%E3%83%95%E3%82%A1%E3%83%BC%E3%82%B9%E3%83%88/
è£è¶³ïŒä¿¡ä»»æç¥šã®é¡æ«ïŒ: 2008 幎㮠"Vote of No Confidence" ã¯ã
EF v1 ããæ°žç¶åéäŸåïŒPersistence IgnoranceïŒãæ¬ ãã
ãã¢ãã«é§åãéå°ããšãã£ãç¹ãæ¹å€ãããã®ã
ãã®åŸãEF 4.1 ã® Code First ãš POCO ãµããŒãã«ãã£ãŠ
æ¹å€ã®äžå¿çãªè«ç¹ã¯ã»ãŒè§£æ¶ãããã
æŽå²ççµç·¯ãšããŠèªãã¹ãç¯ã§ããã
Entity Framework ããã£ã³ã»ã«ããASP.NET Identityã®
UserStoreãå®è£
ããŠãORM ã®åé¡ã ãªãããšæã£ãç¹ã¯ã
ããã°ã©ã ã®
- ã€ã³ã¿ãŒãã§ã€ã¹ãšãªã£ãŠãã芪åéå±€ã®ãããªããžã§ã¯ãã»ã¢ãã«ãšã
- ã¹ãã¬ãŒãžãšã®åæåŠçïŒã»ãŒãã»ããŒãïŒã®ã¿ã€ãã³ã°ãªã©ãã
å®è£ è ã«ãšã£ãŠãé£ããããã£ãŠãã³ãã§ã¯ãªãããšæãã
-
é£ããã®èæ¯ã¯ã
-
èªåã§UserStoreãå®è£ ããŠããŠããã®åæã¯é£ããã
- åæåŠçã®ä»æ§ã決ããå¿ èŠãããã
- åæåŠçã®ä»æ§ãæãåºãã
åŠçå šäœãšã®ç¹ãããçè§£ããå¿ èŠãããã
-
ORM ãããã¯ãã§ãã©ãã¯ããã¯ã¹åããå Žåã
- åæåŠçã®ä»æ§ã決ããå¿ èŠã¯ç¡ããã
- åæåŠçã®ä»æ§ã調ã¹ããããããã¬ã§ãªããŒã¹ããŠ
ïŒEntity Framework ã®èª¿æ»ïŒã
åŠçå šäœãšã®ç¹ãããçè§£ããå¿ èŠãããã
çãšèšã£ãç¹ã ãšæãã
-
-
â»
-
UserStoreã¯ãMemory ã¢ãŒããš DBMS ã¢ãŒããåŠçããã®ã§ã
Memory ã¢ãŒãã®å®è£ ã®åŸãDBMS ã¢ãŒããå®è£ ããããšããã¿ã€ãã³ã°ã§
ãã®é£ããã«æ°ä»ãã -
ãªããžã§ã¯ããæäœããã¿ã€ãã³ã°ã§çŽã¡ã«åæããã仿§ã«ããã°ã
åé¡ã¯ãªããªãããå®éã¯ãæ§èœäºã ã«æžããããã«ã
æ§èœãèæ ®ããŠé©åãªã¿ã€ãã³ã°ã«åæããå¿ èŠãããã
-
è£è¶³ïŒãã®é£ããã®æ£äœïŒ: ããã§è¿°ã¹ãããŠããã®ã¯ã
ãªããžã§ã¯ã ã°ã©ãã®æ°žç¶åã¿ã€ãã³ã°ãšããã
ORM ã®æ¬è³ªçãªé£æã§ããã
EF ã®SaveChanges()ã JPA ã® flush ã
ããã€ãã©ããŸã§ãæžã蟌ãã®ãããçè§£ãã«ããã®ãšåæ ¹ã§ã
Unit of Work ãã¿ãŒã³ãæ±ããåºæã®è€éããšèšãããå®åã§ã®ç·©åçã¯ã
- éçŽïŒAggregateïŒã®å¢çãå°ããä¿ã€
芪åéå±€ãæ·±ãããªãDbContextã®å¯¿åœãçããã
ASP.NET Core ã® ScopedïŒãªã¯ãšã¹ãåäœïŒãæ¢å®ãªã®ã¯ãã®ãã- èªã¿åããšæžã蟌ã¿ã§ã¢ãã«ãåããïŒCQRS çãªå²ãåãïŒ
ãããã«ãªãã
åºå¹¹ç³»ã·ã¹ãã ã§ã¯ä»¥äžã®çç±ã§ãã¹ããããšå€æãããããšãå€ãã
æŠå¿µã¢ãã«ã«å¯ŸããŠããã°ã©ãã³ã°ãæ¡çšããŠããã
- å€éšã¹ããŒãã䜿çšã§ããªããããè«çããŒã¿ç¬ç«æ§ãç¡ãã
- æŠå¿µã¹ããŒãã®ããŒã¿æ§é ã䜿çšããŠããã°ã©ãã³ã°ãè¡ãå¿ èŠãããã
-
DBMS ã®ã¹ããŒãããã¢ãã«ïŒEDMïŒãçæããæ¹æ³ãæ¡çšããŠããå Žåã
ã¹ããŒãã®æ§é ãå€ãã£ãå Žåãã¢ãã«ïŒEDMïŒã®äœãçŽããçºçããã -
çæãããã¢ãã«ïŒEDMïŒãã«ã¹ã¿ãã€ãºããŠããå Žåã
äœãçŽãã«ãããã«ã¹ã¿ãã€ãºãç Žæ£ãããŠããŸãå¯èœæ§ãããã- ã«ã¹ã¿ãã€ãºããªããã°ãæŠå¿µã¹ããŒãæ§é ã®å€æŽã
ã¢ãã«ïŒEDMïŒã«åæãã倿Žã«è¿ éã«å¯Ÿå¿ã§ãããšãèšããã - ããããè«çããŒã¿ç¬ç«æ§ãç¡ããããããã°ã©ã ã®å€æŽã¯å¿ èŠã«ãªãã
- ã«ã¹ã¿ãã€ãºããªããã°ãæŠå¿µã¹ããŒãæ§é ã®å€æŽã
-
RAD éçºããŒã«ã«ç¹æã®ãä¿å®æ§ã®æªããããã
è£è¶³ïŒEDMX ãç¡ããªã£ãããšã«ããå€åïŒ: EF Core ã«ã¯ EDMX ãç¡ãã
ãªããŒã¹ ãšã³ãžãã¢ãªã³ã°ã¯dotnet ef dbcontext scaffoldã«ãã
C# ã³ãŒãçæã§ããã
çæå ãpartial classãšããŠæ±ããã«ã¹ã¿ãã€ãºãå¥ãã¡ã€ã«ã«çœ®ãã°ã
å scaffold ã§ã«ã¹ã¿ãã€ãºã倱ãããåé¡ã¯ç·©åã§ããã
ãã ããè«çããŒã¿ç¬ç«æ§ãç¡ãããšããææãã®ãã®ã¯ã
ãšã³ãã£ãã£ïŒããŒãã«ãšãã察å¿ãæ¡ãéãçŸåšãæç«ããã察åŠãšããŠã¯ã
- DB åŽã«ãã¥ãŒãäœããããããšã³ãã£ãã£ã«ããããã
ïŒEF Core ã®ToView()ãå€éšã¹ããŒãã«çžåœããå±€ã DB åŽã§æã€ïŒ- èªã¿åãå°çšã® DTO ãžçŽæ¥å°åœ±ããïŒ
Selectã§å¿ èŠãªåœ¢ã«æŽåœ¢ïŒãšãã£ã圢ã§ãå€éšã¹ããŒãçãªå±€ãå¥éèšããããšã«ãªãã
SQL ããLINQ to Entity ã®ãšã³ãžã³ã«çæããã圢ã§ããã
ãŸããå
éšå®è£
ãšãã®åäœããã©ãã¯ããã¯ã¹ã«ãªã£ãŠããããïŒâ»1ïŒ
ããããæç¢ºã«ãªããªããšèšèšããã¥ãŒãã³ã°ãåé¡åæãªã©ãå°é£ã
åŸã£ãŠïŒç¹ã«æ¥æ¬ã®ïŒãšã³ã¿ãŒãã©ã€ãºã»ã¢ããªã±ãŒã·ã§ã³ã§ã¯æ¬é ãããŠããã
ããã¯ãJava ã® Java8 ã§ JPA ã§ Hibernate ã§ Jinq ãæ¬é ãããã®ãš âã
- ïŒâ»1ïŒQuestions about EntityFramework
https://github.com/OpenTouryoProject/SampleProgram/issues/6
https://www.osscons.jp/jowlrb9pr-537/
- Entity FrameworkãRDB ãã NoSQL ã®ã»ããããããããã
- ããããé·ã ãNoSQL çšã® Entity Framework ãããã€ãããªãªãŒã¹ãããªãã£ãã
- 2018 幎㫠EF ã³ã¢ã SQL ããŒã¿ããŒã¹ãš NoSQL ããŒã¿ããŒã¹ãçµ±äžãããããã
- ...ãããããŸã£ããæµè¡ã£ãŠããªãæã
è£è¶³ïŒææ°åïŒCosmos DB ãããã€ãïŒ: ããã§èšåãããŠããã®ã¯
EF Core ã® Azure Cosmos DB ãããã€ãïŒEF Core 3.0 ã§æ£åŒæäŸïŒã§ããã
çŸåšãæäŸã»æ¹åãç¶ããŠãããã
- ãªã¬ãŒã·ã§ãã«åºæã®æ©èœïŒçµåããã€ã°ã¬ãŒã·ã§ã³çïŒã¯äœ¿ããªã
- Cosmos DB åŽã® APIïŒããŒãã£ã·ã§ã³ ããŒãRU æ¶è²»ïŒãæèããå¿ èŠãããã
çµå±ãæœè±¡åã§ããŠããªãããããNoSQL ã§ã¯åãµãŒãã¹ã® SDK ãçŽæ¥äœ¿ãã®ãäž»æµã®ãŸãŸã§ããã
ããŸã£ããæµè¡ã£ãŠããªãæããšãã芳å¯ã¯ãçŸåšãæŠã劥åœãšèšããã
è£è¶³ïŒçŸåšã®ç·æ¬ïŒ: æ¬ããŒãžã®æžå¿µã®ãã¡ã
æžå¿µ çŸåš äžæ¬æŽæ°ãã§ããªã è§£æ¶ïŒ ExecuteUpdate/ExecuteDeleteïŒé å»¶èªã¿èŸŒã¿ã«ãã N+1 ç·©åïŒEF Core ã¯æ¢å®ã§ç¡å¹ïŒ EDMX ã®äœãçŽã è§£æ¶ïŒEDMX èªäœãç¡ãïŒ ä¿¡ä»»æç¥šã®è«ç¹ïŒPOCO / æ°žç¶åéäŸåïŒ è§£æ¶ïŒCode FirstïŒ çºè¡ SQL ãèŠããªã ç·©åïŒãã°ã»ã¯ãšãª ã¹ãã¢ïŒ è«çããŒã¿ç¬ç«æ§ãç¡ã æ®ãïŒãã¥ãŒã DTO ã§å¥é察åŠïŒ è€éãªéèšã»åçã¯ãšãªã®è¡šçŸå æ®ãïŒç SQL ãšã®äœµçšãåæïŒ çµè«ãšããŠãçŸåšã¯æä»ã§ã¯ãªã䜵çšãå®ç³ã§ããã
倧åã® CRUD 㯠EF Coreãæ§èœãèŠãç®æãšè€éãªåç §ç³»ã¯
Dapperãçã® ADO.NETããšããæ§æãåºãæ¡ãããŠãã
ïŒADO.NET vs ORM (Entity Framework, Dapper)ïŒã
Tags: ç§»è¡, .NETéçº, ããŒã¿ã¢ã¯ã»ã¹, ADO.NET, Entity Framework, æ§èœ