본문 바로가기
728x90
반응형

분류 전체보기303

Entity Framework Core] 팀 개발 환경에서 Migrations 팀 개발환경에서 Migrations을 사용할 때, model snapshot file에 더 주의를 기울어야 한다. 이 파일은 동료가 migration merge를 깔끔하게 할지, conflict를 해결하기 위해 migration을 다시 만들어야 할지 말해준다. Merging 동료의 것으로 부터 migrations을 merge할때, model snapshot file에 충돌이 날 수 있다. 양쪽 변경이 무관하면, 사소한 문제로 two migrations이 공존할 수 있다. 예를들어, customer entity type 구성에서 다음과 같은 merge conflict가 발생할 수 있다. > Theirs 두 properties 모두 최종 model에 포함되기 때문에, 다 추가하는 것으로 merge를 종결시킬.. 2023. 7. 20.
Entity Framework Core] Migrations 반영 migrations이 추가되고 나면, database에 적용해야 한다. production 환경 또는 development lifecycle에 더 적합하게 처리하기 위한, 여러가지 전략이 있다. 배포 전략이 무엇이던 간에, 운영 db에 적용하기 전 항상 생성된 migrations을 검수하고 테스트해야 한다. migration을 drop column을 할 수 있으며, 배포 시 여러이유로 실패할 수 있다. SQL scripts 운영DB에 migrations을 적용하기 위한 방법으로 추천되는 것은 SQL scripts이다. 이 전략은 다음의 장점을 가진다. SQL scripts는 정확성을 위해 검토할 수 있다. schema 변경을 운영DB에 적용하는 것은, 데이터 손실을 가져올 수 있는 위험한 작업이기 때문에.. 2023. 7. 20.
Entity Framework Core] Migrations 관리 Customize migration code EF Core가 일반적으로 정확한 migrations을 생성하지만, 원하는 변경과 일치하는지 항상 code를 살펴보아야 한다. 몇몇 상황에서는 꼭 필요하다. Column renames 한 가지 예로, property 이름변경 시, customizing migrations이 필요하다. property명을 Name에서 FullName으로 변경 시, EF Core는 다음의 migration을 생성한다. migrationBuilder.DropColumn( name: "Name", table: "Customers"); migrationBuilder.AddColumn( name: "FullName", table: "Customers", nullable: true); EF.. 2023. 7. 20.
Entity Framework Core] transactions SaveChanges 함수를 호출할 때마다, transaction이 실행된다. transaction은 아래와 같은 특성이 있다. atomic : transaction 안에 모든 operations이 모두 commit 되거나, 되지 않는다. consistent : transaction 전후, database 상태는 일관된다. 예를들어 계좌이체를 할 때, 한 계좌에서 100달러를 인출했으면 한 계좌에 100달러를 입금되어 있어야 한다. isolated : transaction 동안, 수정은 다른 프로세스로부터 숨겨져있어야 한다. 여러 isolation level이 있다. 강력한 level일 수록, 데이터 무결성에 좋다. 하지만, lock이 많을수록, 다른 프로세스에 부정적인 영향을 준다. durable : .. 2023. 7. 14.
Entity Framework Core] Loading pattern Eager loading : 일찍 데이터 로딩 Lazy loading : 데이터 필요 직전에, 자동으로 데이터 로딩 Explicit loading : 매뉴얼대로 데이터 로딩 Eager loading entities IQuryable? orders = _context.Orders? .Include(o => o.Items); if (orders is null) { WriteLine("주문건 없음"); } foreach (Order o in orders) { WriteLine($"{o.OrderId}의 품목개수 : {o.Items.Count}"); } foreach 돌면서, OrderId와 Items의 개수를 가져온다. 가능한 이유는, Include 함수를 호출하여 eager loading할 수 있기 때문이다.. 2023. 7. 14.
C#] type, System.Type, System.Reflection type : string, int, float, double 등등... 변수와 상수가 갖는 type이다. 함수는 type 형식의 parameters를 전달받고 values를 반환할 수 있다. type에는 여러 카테고리가 있는데, built-in value types, built-in reference types가 대부분이다. System.Type : type에 상관없이 object, variables, constants에 reflect할 수 있는 함수를 제공한다. Reflection : OOP에서 우리는 class, struct 와 같은 model을 사용하여 object의 성격과 행동을 정의한다. 이러한 model을 설명하는 data를 metadata라고 한다. runtime에서 Reflection이라 .. 2023. 6. 19.
728x90
반응형