본문 바로가기
728x90
반응형

Entity Framework Core26

.NET Core MVC] EF Core - 10. Cartesian Product, Cartesian Explosion Single query의 Performance issue RDB 작업을 할때, EF는 single query에 JOIN을 사용해서 related entities 데이터를 로딩한다. SQL에서 JOIN이 일반적인 방법이지만, 부적절하게 사용하면 심각한 Performance issue를 일으킬 수 있다. Cartesian Product Cartesian product는 2 sets의 곱을 나타내는 수학적 표현이다. first set이 2 elements로 이루어져 있고, second set이 3 elements로 이루어져있을 때, cartesian product 결과는 6 elements이다. first set의 각 elements에 second set의 모든 elements를 조합한다. { a1, a2 }.. 2023. 9. 4.
.NET Core MVC] EF Core - 9. raw SQL queries raw SQL queries 실행 EF의 장점 중 하나는, data 저장 특정 방법에 매여있지 않다는 것이다. SQL queries를 작성할 수 있다. 하지만, 특정 SQL queries를 실행할때 예외적인 시나리오가 있다. 이 시나리오를 위해, SQL 구문을 database에 직접적으로 전달할 수 있는 함수를 제공한다. EF Core 1.0에 다음의 option이 있다. entity type을 return하는 queries를 위해서는 DbSet.FromSql 함수를 사용한다. return object는 DbSet object이어야 한다. turn tracking off 하지 않는 이상 database context에 의해 자동으로 추적된다. non-query 명령어를 위해서는 Database.Execu.. 2023. 9. 1.
.NET Core MVC] EF Core - 8. Entity 상속(table-per-hierachy inheritance) OOP에서 코드 재사용성을 높이기 위해 상속을 사용할 수 있다. 공통 properties를 갖는 Person base class를 상속받도록 Instructor, Student class를 수정해보자. 웹페에지는 수정되지 않고, 코드만 수정하면 자동으로 database에 반영된다. Map inheritance to database 이러한 상속을 database에 구현하는 여러 방법이 있다. TPH students, instructors 모두의 정보를 포함하는 Person table을 갖을 수 있다. row가 어떤 type인지 식별하기 위한 discriminator column을 갖는다. 하나의 table에서 상속 구조를 만드는 패턴을 table-per-hierachy inheritance라고 한다. TP.. 2023. 8. 31.
.NET Core MVC] EF Core - 7. DB 동시성 제어(2) DbUpdateConcurrencyException Department.cs namespace WEB.Models; public class Department { public int DepartmentID { get; set; } [StringLength(50, MinimumLength = 3)] public string Name { get; set; } [DataType(DataType.Currency)] [Column(TypeName = "money")] public decimal Budget { get; set; } [DataType(DataType.Date)] [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)] [Display(Name = "Start .. 2023. 8. 29.
.NET Core MVC] EF Core - 7. DB 동시성 제어(1) tracking property 동시성 충돌(Concurrency conflicts) 동시성 충돌은 한 사용자가 수정하기 위해 entity를 조회하고, db에 수정사항을 저장하기 전에 다른 사용자가 동일한 entity를 수정하면 발생한다. 이러한 충돌을 감지하지 못하면, 마지막 저장하는 사람이 다른 사람의 수정사항을 덮어쓸 수 있다. 많은 applications에서 이러한 risk는 감당할만하다. 사용자가 적거나, 수정사항이 적거나, 몇몇 수정사항을 덮어써도 문제되지 않는 경우에는, 동시성 제어를 위한 프로그래밍의 비용이 이로인한 이익보다 더 클 수 있다. 이러한 경우에는, 동시성 제어를 위한 구성을 하지 않아도 된다. Pessimistic concurrency (locking) 어플리케이션이 동시성 시나리오에서 사고로 데이터가 손실되.. 2023. 8. 29.
.NET Core MVC] EF Core - 6.related data CRUD related data CRUD를 구현하기 위해, 아래 view파일을 포함한 CRUD 기능에 필요한 코드를 작성해보자. Index.cshtml Create.cshtml Delete.cstml 우선 Course Entity를 확인해보자. Navigation Property가 3개가 있지만, 수정은 Department만 할 수 있도록 작성하였다. namespace WEB.Models; public class Course { [DatabaseGenerated(DatabaseGeneratedOption.None)] [Display(Name = "Number")] public int CourseID { get; set; } [StringLength(50, MinimumLength = 3)] public strin.. 2023. 8. 28.
728x90
반응형