FreeSql 새로운 기능 소개: 탐욕 로드 방법 5가지
FreeSql은 6개월의 개발과 친구들의 업무 실천을 통해 끊임없이 개선하고 혁신했다. 현재 1500개 정도의 단원 테스트 방법을 가지고 있으며 각 방법마다 다른 테스트 면을 덮고 있다.
오늘 FreeSql의 다양한 탐욕이 담긴 포즈를 소개해 드리겠습니다.이 절의 내용에 대응하는 것은 [시간 지연 로드]도 있다. 탐욕 로드와 그가 함께 소개해야 할 것은 프로젝트를 개발하는 과정에서 반드시 두 가지를 함께 관리해야 고품질의 프로그램을 쓸 수 있다.시간 지연 로드에 관해서는 나중에 시간이 나면 따로 작성합니다.
FreeSql은 강력한 NETstandard 라이브러리로 대상 관계 매핑 프로그램(O/RM)에 사용되며 개발자가 사용할 수 있도록 한다.NETstandard 객체는 데이터베이스를 처리하기 때문에 대부분의 데이터 액세스 코드를 자주 작성할 필요가 없습니다.
4
4
4
4
4
4
4
4
4
탐욕 방법 1: Dto 매핑 쿼리
Select().Limit(10).ToList(a => new TestDto { id = a.Id, name = a.Title });
Select().Limit(10).ToList(a => new TestDto());
Select().Limit(10).ToList(a => new TestDto { });
Select().Limit(10).ToList(a => new TestDto() { });
Select().Limit(10).ToList();
이 맵은 단일 테이블/다중 테이블을 지원합니다.
규칙 찾기, 속성 이름 찾기, 내부 객체 순환같은 필드가 나올 때까지 메인 테이블을 우선적으로 찾습니다.
예:
A, B, C에는 id가 있고 Dto {id, a1, a2, b1, b2}, A.id가 매핑됩니다.id = C.id 매핑을 지정할 수도 있습니다.
dto에서 내비게이션 속성을 직접 비추기도 합니다.
맞아요. 어떤 대상을 비추면 탐욕스럽게 불러올 수 있어요. 이 기능은 데이터베이스 조회 전에 비추는 것이지 모든 데이터를 찾아서 재구성하는 것이 아닙니다.
탐욕 방법 2: 탐색 속성 ManyToOne/OneToOne
ManyToOne/OneToOne 내비게이션 속성은 ToList()를 통해 불러옵니다. 이 방법에는 인자가 있습니다:includeNestedMembers.
매개변수 설명:
false: 2단계 Join의 데이터를 되돌려줍니다.
true: 모든 깊이 Join의 내비게이션 데이터를 되돌려줍니다.
질의에 a.Parent가 이미 사용된 경우Parent 유사 표현식은 LeftJoin 등의 작업 없이 사용할 수 있습니다.
예:
class Tag {
[Column(IsIdentity = true)]
public int Id { get; set; }
public string Name { get; set; }
public int? Parent_id { get; set; }
public virtual Tag Parent { get; set; }
}
Select().Where(a => a.Parent.Name == "1").ToList();
// , Join, LeftJoin
탐색 속성을 사용하지 않고 다시 로드하려면 Include 메서드를 사용합니다.(이해하기 어려우면 건너뛸 수 있고, 사용 중에만 체득할 수 있을 수도 있다)
Select().Include(a => a.Parent).ToList();
탐욕 방법 3: 탐색 속성 ManyToMany
IncludeMany는 집합의 내비게이션 속성을 탐욕스럽게 불러옵니다. 사실은 두 번의 조회로 나뉘어 ToList 후에 데이터를 다시 설치했습니다.
class Song {
[Column(IsIdentity = true)]
public int Id { get; set; }
public string Title { get; set; }
public virtual ICollection Tags { get; set; }
}
class Song_tag {
public int Song_id { get; set; }
public virtual Song Song { get; set; }
public int Tag_id { get; set; }
public virtual Tag Tag { get; set; }
}
Select().IncludeMany(a => a.Songs).ToList();
// ManyToMany
IncludeMany에는 두 번째 질의에 앞서 손질 작업을 수행할 수 있는 두 번째 매개변수가 있습니다.
Select().IncludeMany(a => a.Songs,
then => then.Where(song => song.User == "admin")).ToList();
그리고 사실then에서 아래로 Include/Include Many를 계속 진행할 수 있습니다.네가 좋아하기만 한다면 100층으로 내려가도 문제없다.
탐욕 방법 4: 탐색 속성 OneTomany
대체로 ManyToMany 사용법과 같지만 중간 테이블을 통해 데이터를 조회하지 않습니다.
탐욕 방법 5: 변종 속성 OneTomany
변이된 IncludeMany는 내비게이션 속성이 아니더라도 탐욕스럽게 불러올 수 있습니다.일부 오래된 프로젝트에 적합하고 내비게이션 속성 설정이 불규칙적이며 한 쌍의 탐욕스럽게 불러올 수도 있다.
이해하기 편리하도록 나는 다음 두 가지 종류를 만들었는데 그들은 내비게이션 관계를 설정하지 않았다.왜 설정하지 않았냐고 물어볼지도 몰라요.내가 이렇게 하는 것은 직관적으로 이해하기 위해서, 이렇게 하는 것은 직관적으로 이해하기 위해서, 이렇게 하는 것은 직관적으로 이해하기 위해서!!
class Order {
public Guid id { get; set; }
public string xxx { get; set; }
public List Details { get; set; }
}
class OrderDetail{
public Guid id { get; set; }
public string detailTestField { get; set; }
public Guid OrderId { get; set; }
}
Select().IncludeMany(a => a.Details.Where(b => b.OrderId == a.Id)).ToList();
OK, 이렇게 order를 조회할 때details도 조회해 옵니다.
완결
우리는 then에서 limit(5) 기능을 실현하는 것을 고려했다. 장면은 각 하위 기록의 앞의 5개만 조회하고 돌아오는 것이다.
소스 주소:https://github.com/2881099/FreeSql
항상 응원해주신 여러분 감사합니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
작업 중 문제 해결 - (win 2003 asp. net) Session 과 페이지 전송 방법 으로 해결 방안 을 정상적으로 사용 할 수 없습니다.또한 F 는 처음에 우리 의 BP & IT 프로젝트 팀 이 Forms 폼 검증 을 사용 했다 고 판단 할 수 있 습 니 다. 페이지 를 뛰 어 넘 는 것 은http://hr.bingjun.cc/MyTask/MyTas...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.