프로젝트를 진행하다 보면 여러 가지 이유로 컨텍스트(Context)를 분리해서 관리할 필요가 있죠. 권장은 하나의 DB에 하나의 컨텍스트를 사용하는 것이지만 하나의 DB에 여러 컨텍스트를 사용하는 것도 가능합니다. 여러 컨텍스트를 조인하게 되면 성능이 확 떨어지고 조건에 따라서 마이그레이션 명령이 안 먹힐 수 있습니다. 그래서 하나의 컨텍스트를 사용하는 것을 권장하는 것입니다. 이 포스팅에서는 하나의 DB에 여러 컨텍스트를 사용하는 방법에 대해 알아봅시다. 연관글 영역 0. 프로젝트 생성 및 기본 세팅 이 포스팅에서는 'SQLite'를 사용할 예정입니다. (다른 DBMS도 동일합니다.) 프로젝트를 생성하고 누겟(Nuget)에서 다음 종속성을 찾아 추가합니다. - Microsoft.EntityFramewo..
DB를 먼저 작성하거나 다른 프로젝트에 의해 생성된 DB를 사용하는 경우 DB 퍼스트(DB First) 방식을 사용합니다. 연관글 영역 프로젝트는 'ASP.NET Core 2'로 구성되어 있습니다. 이 프로젝트는 sqlite를 기준으로 작성되었습니다. 1. 왜 DB 퍼스트를 사용하는가? 전통적으로 프로젝트가 진행되면 DB를 먼저 만들고 시작했습니다. 예정에는 여기에 직접 쿼리를 날리거나 DBA가 만들어놓은 프로시저를 호출해서 사용했죠. EF(Entity Framework)와 같은 ORM(Object-Relational Mapping) 프레임웍들이 생기면서 모델을 만들어 접근하는 방식을 사용하기 시작합니다. 그렇다면! 기존 방식을 사용하는 프로젝트는 EF를 어떻게 연결하느냐? 이미 만들어져있는 DB의 정보..
코드를 먼저 작성하고 이것을 기반으로 DB를 수정하는 것이 코드 퍼스트(Code First)입니다. 코드 퍼스트가 왜 필요하고 어떻게 사용하는지 알아봅시다. 프로젝트는 'ASP.NET Core 2'로 구성되어 있습니다. 연관글 영역 1. 왜 코드 퍼스트가 필요한가? 전통적인 프로젝트-DB 관계는 DBA가 DB를 만들고 거기에 맞춰 프로그램을 만드는 형태였습니다. 그런데 장비의 가격은 낮아지고 사양은 높아지면서 점점 DB의 성능 이슈를 돈으로 때워도 큰 부담이 안 되는 시대가오게 됩니다! 그러니 프로그래머들이 임시로 DBA를 겸해서 작업하다가 성능 이슈가 발생하는 부분만(혹은 프로젝트가 시작 할 때나 끝날 때쯤) DBA가 붙어서 최적화시키는 프로세스가 정착되었습니다. DB에 맞춰 프로그램을 만들게 되면 문..
엔트리 프레임웍(Entity Framework)에서 Mysql의 'longtext'필드에 인서트 할 때 발생하는 오류입니다. 필드 [필드명] 최대 길이가 '65535'인 문자열 또는 배열 형식이어야 합니다. 1. 원인 엔트리 프래임웍에서 string로 지정된 컬럼을 'Mysql'에서 'varchar' 취급을 해서 발생하는 문제입니다. 'varchar'는 최대크기가 '65535'인데 'longtext'는 크기가 '16777215'라 '65535'보다 큰 데이터를 넣으면 이 오류가 발생합니다. 마침 버그리포트에 같은 내용이 있네요. 참고 : bugs.mysql.com - Wrong handling of fixed length string columns by Entity Framework provider 버..
엔트리 프레임웍(Entity Framework)에서 Mysql에 'Insert'시 기본 키(primary key, PK)와 외래 키(foreign key, FK)가 한 컬럼에 걸려있을 경우 발생하는 오류 입니다. ERROR MESSAGE : ReferentialConstraint의 종속 속성이 저장소 생성 열에 매핑됩니다. 열: '[컬럼 이름]'. 1. 해결 방법 해당 컬럼의 'StoreGeneratedPattern'속성을 'None'로 바꿔주면 됩니다. '.edmx'를 생성하였으면 UI에서도 수정은 가능한데..... UI에서 수정한 내용은 적용이 되질 않습니다 -_-;;; 2. XML 편집기 이용 XML로 접근하여 변경해주어야 합니다. '.edmx'파일에서 오른쪽 클릭 > 다른 프로그램 연결 > XML..
.NET Core에서 'Entity Framework(엔트리 프레임워크)'를 사용하려면 코어용 엔트리 프레임워크가 필요합니다. .NET Core + MySql + Entity Framework 이렇게 사용하려면 'MySQL.Data.EntityFrameworkCore'를 참조해야 합니다. (참고 : nuget - MySql.Data.EntityFrameworkCore (2017-06-14기준 최신 버전 7.0.7-m61 ) ) 그런데 모델을 생성하고 테이블을 업데이트하니 이런에러가 납니다. "The entity type '[Table Name]' requires a primary key to be defined" 원인 내용만 보면 기본키가 지정되지 않아서 나는 것 같습니다. 하지만 이 테이블에는 기본키가..