Linq 쿼리, 매핑 및 번역 없이 EF Core 3에서 SQL 함수 호출

재사용성을 위해 내 C# EF Core 3 응용 프로그램에 일부 논리가 있는 SQL 서버에서 이미 존재하는 스칼라 함수를 호출해야 하는 몇 가지 시나리오를 접했습니다. 그러나 대부분의 가이드는 throw new Notimplemented 예외를 사용하여 C# 함수에 매핑하고 공식 문서와 같은 Linq 쿼리를 사용해야만 이 작업을 수행할 수 있는 방법을 보여줍니다.
저는 Linq 쿼리를 사용할 필요가 없었기 때문에 아래와 같이 다른 방식으로 하고 있습니다.

SQL 함수가 있다고 가정해 보겠습니다.

CREATE FUNCTION dbo.IsStrogestAvenger(@Superhero varchar(100))
RETURNS bit
AS
BEGIN
    declare @result bit=0
    if(@Superhero ='Thor')
        set @result=1
    else
        set @result=0
RETURN @result
END

`

이제 C# 코드로 전환합니다.
결과를 위해 이 출력을 보유할 모델을 생성해 보겠습니다.

`

public class IsStrongestAvengerResult
{
   public bool IsStrongestAvenger { get; set; }
}

`

아래와 같이 컨텍스트 클래스에 매핑하십시오.

`

public virtual DbSet<IsStrongestAvengerResult> IsStrongestAvenger{ get; set; }

`

그리고

`

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<IsStrongestAvengerResult>(e => e.HasNoKey());
}

`

이제 FromSqlInterpolated를 사용하여 이 함수와 맵을 호출합니다.

`

public bool IsStrongestAvenger(string Superhero)
  {
    return context.IsStrongestAvenger.FromSqlInterpolated($"select   dbo.IsStrogestAvenger ({Superhero}) as IsStrongestAvenger").FirstOrDefault().IsStrongestAvenger;
}

`

Important thing to note above is the use of AS >IsStrongestAvenger and it should match with the property name in >our model IsStrongestAvengerResult.IsStrongestAvenger



이제 이 함수를 C#에서 직접 호출하여 출력을 얻을 수 있습니다.

읽어 주셔서 감사합니다. 의견과 제안은 높이 평가됩니다.

좋은 웹페이지 즐겨찾기