FreeSql AOP 기능 모듈 개요

소개

FreeSql은 .NETStandard 라이브러리로, 객체 관계 매핑(O/RM)을 위한 강력한 도구입니다. .NETCore 2.1 이상 또는 .NETFramework 4.6.1 이상에서 작동합니다.

QQ 그룹: 4336577(满), 8578575(온라인), 52508226(온라인)

사용자가 질문하는 경우가 적은 것으로 알려져 있습니다. 비즈니스 차단으로 인해 문제가 발생할 수 있지만, 프레임워크 사용 문제로 인해 차단되는 것은 손해입니다. 우리의 슬로건: .net에서 가장 편리한 ORM! 모든 개발자가 웃을 수 있도록 하겠습니다 😏!

전체 기능

  • IFreeSql은 핵심이며, 기본적인 사용법을 제공합니다;
  • FreeSql.DbContext는 확장 패키지로, 객체 지향 방식을 제공합니다 (EF와 유사);
  • FreeSql.Repository도 확장 패키지로, 저장소 및 단위 작업 방식을 제공합니다 (실제로 DbContext와 동일한 확장 패키지);
  • FreeSql.Connection.Extensions도 확장 패키지로, Dapper와 유사한 방식을 제공합니다;

소스 코드 주소: https://github.com/2881099/FreeSql, 여기서 위에 언급된 각 저장소에 접근할 수 있습니다.

fsql = new FreeSql.FreeSqlBuilder()
	.UseConnectionString(FreeSql.DataType.Sqlite, @"Data Source=|DataDirectory|\document.db;Attachs=xxxtb.db;Pooling=true;Max Pool Size=10")
	.UseAutoSyncStructure(true) //자동 이전(CodeFirst)
	.Build();

AOP 기능

오늘은 기존의 AOP 기능을 소개하고 있으며, 앞으로 사용자 요구에 따라 계속 강화될 예정입니다.

CRUD 감사

마윈은 996은 복을 쌓는다고 말했습니다. 대부분의 프로그래머에게는 오버타임이 좋은 일입니다... 적어도闲人은 아니므로, 실직하지 않습니다.

그러나 어떤 SQL 조작이 시간이 많이 걸리는 경우, 관련된 감사 기능이 없으면 문제를 해결하기 어렵습니다. 복과 당신은 가까이 있습니다 (하하).

FreeSql은 간단한 유사한 기능을 지원합니다:

fsql.Aop.CurdAfter += (s, e) => {
	if (e.ElapsedMilliseconds > 200) {
		//로그 기록
		//관리자에게 메시지 전송
	}
};

네, 이벤트 하나만으로 전체에 영향을 줄 수 있습니다.

CurdAfter 외에도 CurdBefore(SQL 실행 전에 트리거)가 있습니다.

이전 스크립트 감사

FreeSql에는 자체 이전 기능이 있습니다. 이전 SQL 문장이 어떤 모습인지 궁금할 수 있습니다.

  • 예를 들어, 테이블 생성 시;
  • 예를 들어, 필드 추가 시;
  • 예를 들어, 테이블 이름 변경, 필드 이름 변경 시;
  • 필드 유형 변경 후에도;

이러한 작업은 FreeSql.CodeFirst에서 거의 신경 쓰지 않아도 되며, 우리는 개발 환경에서 자동 이전 기능을 권장하며, 실제 환경에서는 다른 도구로 대체하는 것이 좋습니다.

그러나 여전히 프로젝트에 대한 완전한 로깅이 필요할 수 있습니다.

fsql.Aop.SyncStructureBefore, fsql.Aop.SyncStructureAfter 두 이벤트가 이 문제를 해결하는 데 도움이 됩니다.

사용자 정의 엔티티 특성

예를 들어, 프로젝트 내에서 다른 ORM을 사용하고 있다면, 예를 들어 EFCore, 이 경우 엔티티에 [Key]가 있을 수 있습니다. 그러나 이는 FreeSql의 [Column(IsPrimary = true]와 다릅니다.

Q: FreeSql 엔티티 특성이 왜 이렇게 복잡한가요?

A: 일관된 사용법을 고려하기 위해 모든 것을 ColumnAttribute에 포장했습니다. 이로 인해 사용자는 특성을 어디서 사용해야 할지 기억하거나 using을 통해 불필요하게 작성할 필요가 없습니다. 예를 들어, 자동 증가 [Column(IsIdentity = true)]로 충분합니다.

FreeSql은 사용자 정의 특성 기능을 제공하여 여러 ORM과 동일한 엔티티 특성을 공유할 수 있으며, 중복 정의를 피할 수 있습니다.

fsql.Aop.ConfigEntity += (s, e) => {
    var attr = e.EntityType.GetCustomAttributes(
        typeof(System.ComponentModel.DataAnnotations.Schema.TableAttribute), false).FirstOrDefault() 
        as System.ComponentModel.DataAnnotations.Schema.TableAttribute;
    if (attr != null)
        e.ModifyResult.Name = attr.Name; //테이블 이름
};

fsql.Aop.ConfigEntityProperty += (s, e) => {
  if (e.Property.GetCustomAttributes(
    typeof(System.ComponentModel.DataAnnotations.KeyAttribute), false).Any())
        e.ModifyResult.IsPrimary = true; //주키
};

이렇게 하면 FreeSql의 엔티티 특성을 EFCore처럼 설정할 수 있습니다. 기타 자동 증가, 낙관적 잠금 등은 이와 마찬가지로 설정할 수 있습니다.

사용자 정의 표현식

FreeSql 내부 표현식은 매우 풍부하며, 다양한 데이터베이스와 호환도 잘 이루어집니다.

표현식 지원 수준에 대해 자세히 보려면 다음을 참조하세요: https://github.com/2881099/FreeSql/wiki/%E8%A1%A8%E8%BE%BE%E5%BC%8F%E5%87%BD%E6%95%B0

이와 같은 풍부함에도 불구하고, 사용자의 요구를 충족시키지 못할 수 있습니다. FreeSql은 사용자 정의 표현식 해석 인터페이스를 외부에 공개합니다:

fsql.Aop.ParseExpression += (s, e) => {
    if (e.Expression.NodeType == Call && e.Expression.Name == "get_Item")
        e.Result = "1111";
};

이 해석은 다소 복잡합니다. e.Expression이 복잡할 경우, e.FreeParse 메서드를 제공합니다. 이 메서드는 FreeSql 내장 표현식 해석 엔진을 호출하는 것과 같으며, 분석을 돕습니다.

계속됩니다

다운로드 주소: https://github.com/2881099/FreeSql

우선 사항: 5가지 데이터베이스 지원 완전, 1500개 이상의 단위 테스트, 문서 기능 완비

더 많은 사람들이 우리 팀에 참여해 주세요! 함께 .NETCore에서 가장 편리한 ORM을 만들자!

8월 12일 18:07에 게시됨