EF(Entity Framework)에서 FK(foreign key)를 걸면 자동으로 List 타입을 관리해줍니다. FK가 개발 중에는 좋은데 서비스 중에는 좀 단점이 있고(특정 데이터를 수동으로 지우려면 연결된 FK를 순서대로 뒤에서부터 지워야 함.) 자동으로 바인딩 되다 보니 무분별하게 난발하게 돼서 속도를 다 까먹는 문제가 있습니다. (잘 관리하면 좋긴 합니다. ㅎㅎㅎ) EF는 FK로 묶인 데이터에 접근하면 인덱스로 전체 선택(select)해서 처리하기 때문입니다. ㅎㄷㄷ 그래서 저는 가급적 FK를 안 쓰고 수동으로 선택(select)해서 사용하는 방법을 사용합니다. 그러다 보니 EF에서 리스트형 데이터들은 어떻게 처리되는지 궁금해졌습니다. 1. 배열과 리스트 모델을 아래와 같이 선언하고 마이그레이..
1. 오류 발견 지정된 파일을 찾을 수 없다는 에러가 나는데 수동으로 파일을 읽어도 잘 읽어지고, 'File.ReadAllText'를 써도 잘 읽어집니다. 웃긴 건 이걸 DLL로 만들어 쓰고 있었는데 원본 테스트에서는 아무런 문제가 없고, 에러 나는 타이밍은 파일을 읽을 때가 아니고 경로를 전달할 때입니다??? System.IO.FileNotFoundException: Could not load file or assembly 'Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed'. 지정된 파일을 찾을 수 없습니다. File name: 'Newtonsoft.Json, Version=13.0.0.0, Cultu..
다른 포스팅에서 한번 다룬 내용이지만 그 포스팅은 종합적인 내용이라 검색하기 좋게 분리한 내용입니다. 연관글 영역 1. 증상 콘솔 애플리케이션(console application)에서 'F11'을 누르면 전체화면으로 전환됩니다. 이렇게 되면 키 이벤트로 'F11'을 받을 수 없게 됩니다. 2. 해결 'WinAPI'를 이용하여 '시스템 입력'을 꺼주면 됩니다. '시스템 입력'을 끄게 되면 'Ctrl + C' 같은 시스템 단축키도 동작하지 않습니다. 'WinAPI'를 사용하려면 1) 애플리케이션의 핸들을 가지고 와서 2) 콘솔 모드를 읽은 후 3) 읽은 모드를 변경하고 4) 변경된 콘솔 모드를 적용 하면 됩니다. 2-1. 사용할 함수 마샬링 필요한 함수는 GetStdHandle : 애플리케이션의 핸들을 가지..
다른 포스팅에서 한번 다룬 내용이지만 그 포스팅은 종합적인 내용이라 검색하기 좋게 분리한 내용입니다. 연관글 영역 1. 증상 콘솔 애플리케이션(console application)에서 콘솔 창을 클릭하거나 드래그하면 응용프로그램이 멈추는 현상 있습니다. 이것은 '빠른 편집 모드(Quick Edit Mode)'가 활성화 되어 있기 때문입니다. 2. 해결 'WinAPI'를 이용하여 '빠른 편집 모드'를 꺼주면 됩니다. 'WinAPI'를 사용하려면 1) 애플리케이션의 핸들을 가지고 와서 2) 콘솔 모드를 읽은 후 3) 읽은 모드를 변경하고 4) 변경된 콘솔 모드를 적용 하면 됩니다. 2-1. 사용할 함수 마샬링 필요한 함수는 GetStdHandle : 애플리케이션의 핸들을 가지고 오는 함수 GetConsole..
엔티티 프레임워크 같은 프레임워크를 객체 관계형 매핑(Object–relational mapping), 줄여서 ORM이라고 부릅니다. 이런 프레임워크의 장점 중 하나가 약간의 작업만 하면 다양한 DB를 연결할 수 있다는 것입니다. 이 포스팅에서는 'SQLite'와 'MSSQL'를 따로따로 마이그레이션하고 사용하겠습니다. 다른 DB도 얼마든지 추가할 수 있습니다. [Entity Framework 6] 하나의 DB에 여러 컨텍스트(Multiple DbContext) 사용하기 [Entity Framework 6] 하나의 DB에 여러 컨텍스트(Multiple DbContext) 사용할 때 마이그레이션 관리하기 [Entity Framework 6] 여러 종류 DB대응하기 0. 프로젝트 생성 DB 테이블 모델과 컨..
이전 포스팅에서는 하나의 DB에 여러 컨텍스트를 사용하기 위해 각각 마이그레이션을 생성해서 관리하는 방법을 사용했습니다. 이 방법은 여러 개의 마이그레이션을 관리해야 해서 불편함이 많습니다. 그래서 전체를 관리하는 컨텍스트를 만들고 마이그레이션과 조인이 필요할 때는 이 '전체 컨텍스트'를 사용하는 것이 좋습니다. [Entity Framework 6] 하나의 DB에 여러 컨텍스트(Multiple DbContext) 사용하기 [Entity Framework 6] 하나의 DB에 여러 컨텍스트(Multiple DbContext) 사용할 때 마이그레이션 관리하기 [Entity Framework 6] 여러 종류 DB대응하기 0. 방법 이 방법의 단점은 전체용 컨텍스트를 따로 관리해야 한다는 것인데..... 관리와 ..
프로젝트를 진행하다 보면 여러 가지 이유로 컨텍스트(Context)를 분리해서 관리할 필요가 있죠. 권장은 하나의 DB에 하나의 컨텍스트를 사용하는 것이지만 하나의 DB에 여러 컨텍스트를 사용하는 것도 가능합니다. 여러 컨텍스트를 조인하게 되면 성능이 확 떨어지므로 권장은 하나의 컨텍스트를 사용하는 것을 권장하는 것입니다. 이 포스팅에서는 하나의 DB에 여러 컨텍스트를 사용하는 방법에 대해 알아봅시다. [Entity Framework 6] 하나의 DB에 여러 컨텍스트(Multiple DbContext) 사용하기 [Entity Framework 6] 하나의 DB에 여러 컨텍스트(Multiple DbContext) 사용할 때 마이그레이션 관리하기 [Entity Framework 6] 여러 종류 DB대응하기 ..
닷넷 5 이후 버전(기억이 맞나....) 부터는 버전 관리 인터페이스가 바뀌었습니다. 간단하게 '버전 자동 증가' 설정 방법을 다루고 이 정보를 시간으로 치환해보겠습니다. 연관글 영역 1. '버전 자동 증가' 설정하기 이전 버전에서는 프로젝트를 생성하면 'AssemblyInfo.cs'파일이 생성되고 빌드할 때 합쳐졌습니다. 이제는 프로젝트 파일(.csproj)에 정보가 기록되어 있다가 빌드할 때 'AssemblyInfo.cs'파일이 생성됩니다. 그래서 직접 'AssemblyInfo.cs'를 수정하면 안 됩니다. 1-1. 버전에 와일드카드(wildcard) 사용하기 예전 포스팅에서도 다뤘던 내용입니다. (참고 : [.NET] 버전 자동 증가(변경) 기능 켜기 ) 버전 정보에 와일드카드를 사용할 수 있습니다..
당연히 참(true)입니다만..... 왜 이 당연한 질문을 하는 걸까요? 인터넷을 돌아다니다 보면 빈문자열("")대신 'string.Empty'라는 녀석을 쓰라는 말을 많이 볼 수 있습니다. 이 질문의 답을 이해하려면 .NET에서 문자열이 어떻게 살아가고 있는지 알아야 합니다. 1. 문자열의 구현 대부분의 언어가 'string'형을 구현할 때 내부에서는 'char'배열로 구현합니다. 그래서 아래와 같이 배열로 접근 가능하죠. (언어마다 접근방법이 다를 수 있습니다.) 문자열은 참조 형식 변수? 값 형식 변수? 변수의 형식에는 크게 2가지 가 있습니다. - 참조 형식 (참고 : MS Docs - 값 형식(C# 참조) ) 그때그때 메모리에 할당되고 값을 전달할 때는 복사되어 원본이 보존됩니다. - 값 형식 ..
닷넷에서 응용프로그램을 종료할 때 사용하는 명령은 크게 3가지입니다. Application.Exit() Environment.Exit(0) System.Diagnostics.Process.GetCurrentProcess().Kill(); 이 포스팅에서는 이 3가지의 차이점을 알아봅니다. 샘플을 실행해보고 보면서 확인하면 더 이해하기 쉽습니다. 샘플 : github - dang-gun/DotNetSamples/ExitTest/ 연관글 영역 1. Application.Exit() 내부에 종료를 알리고 모든 메소드가 끝나면 종료됩니다. 참고 : MS Docs - Application.Exit 메서드 설명이 복잡하지만..... 간단하게 말하면 애플리케이션에 정상종료를 요청한다는 의미입니다. 그래서 모든 종료 관..