본문 바로가기
[개발] 이야기/[DotNet] 이야기

c# efcore include || AsNoTracking

by 헤이나우
반응형

c#의 entityframework를 사용하다보면 모델에 다른 모델의 정보를 가져와서 뿌릴경우가 있습니다.

이경우 linq조인을 사용하면 되지만 익명타입의 모델이라서 반환이나 argument로 집어넣지 못합니다.

이럴경우 include를 사용하면 됩니다.

 

사용법은 아주 간단합니다.

[ForeignKey("PGIdx")]
        public PGModel PG { get; set; }
        [ForeignKey("PIdx")]
        public PartnerModel Partner { get; set; }
        [ForeignKey("PUserIdx")]
        public PartnerUserModel PartnerUser { get; set; }

모델에다가 이런식으로 다른 모델을 지정하고 ForeignKey를 지정해주면 Include를하면 해당 모델이 자동으로 채워져 있습니다. 해당 데이터가 1:N 관계라면 컬렉션 형태로 선언해주면 됩니다. 

아래는 사용법입니다.

var query = db
                .Include(x => x.PG)
                .Include(x => x.Partner)
                .Include(x => x.PartnerUser)
                .AsQueryable();

Include함수를 사용하여 포함시킬 값을 지정해주면 됩니다.

 

하지면 경우에 따라서 Include없이 해당 모델만 가져와서 사용할 경우가 있습니다.

Include는 성능상 좋다고는 못합니다.

이럴경우 AsNoTracking을 사용해주면 Include를 안시키고 해당 테이블의 데이터만 가져옵니다.

 

var query = db
                //.Include(x=>x.PG)
                //.Include(x=>x.Partner)
                //.Include(x=>x.PartnerUser)
                .AsNoTracking()
                .AsQueryable();

 

이상 아주 미세 팁이었습니다.

반응형

댓글