>데이터 베이스 >MySQL 튜토리얼 >인터셉터를 사용하여 Entity Framework에서 Char(N) 값을 자동으로 자르는 방법은 무엇입니까?

인터셉터를 사용하여 Entity Framework에서 Char(N) 값을 자동으로 자르는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-29 13:32:10332검색

How to Automatically Trim Char(N) Values in Entity Framework Using Interceptors?

Entity Framework 인터셉터를 사용하여 Char(N) 값 자동 자르기

이 시나리오에서는 텍스트 값이 다음과 같이 저장되는 문제에 직면합니다. Entity Framework에서 검색할 때 외부 데이터베이스의 char(N) 필드를 자동으로 잘라야 합니다. (EF).

다행히 EF 6.1에서는 인터셉터를 사용한 솔루션을 제공합니다. Microsoft의 Entity Framework 프로그램 관리자인 Rowan Miller가 설명한 대로 인터셉터를 사용하면 모델의 문자열 속성에서 후행 공백을 자동으로 잘라낼 수 있습니다.

이 솔루션을 구현하려면 다음 단계를 따르세요.

  1. StringTrimmerInterceptor 클래스를 다음과 같이 정의합니다. 다음은 다음과 같습니다.
// Omitted for brevity (see full code provided below)
  1. MyConfiguration 클래스를 생성하여 EF에 인터셉터를 등록합니다.
// Omitted for brevity (see full code provided below)

이 인터셉터 및 구성 클래스를 프로젝트에 추가합니다. , EF는 char(N) 필드에서 검색된 문자열 값을 자동으로 자릅니다. 트리밍은 데이터베이스에서 발생하여 최적의 성능을 보장합니다.

using System.Data.Entity.Core.Common.CommandTrees;
using System.Data.Entity.Core.Common.CommandTrees.ExpressionBuilder;
using System.Data.Entity.Core.Metadata.Edm;
using System.Data.Entity.Infrastructure.Interception;
using System.Linq;

namespace FixedLengthDemo
{
    public class StringTrimmerInterceptor : IDbCommandTreeInterceptor
    {
        public void TreeCreated(DbCommandTreeInterceptionContext interceptionContext)
        {
            if (interceptionContext.OriginalResult.DataSpace == DataSpace.SSpace)
            {
                var queryCommand = interceptionContext.Result as DbQueryCommandTree;
                if (queryCommand != null)
                {
                    var newQuery = queryCommand.Query.Accept(new StringTrimmerQueryVisitor());
                    interceptionContext.Result = new DbQueryCommandTree(
                        queryCommand.MetadataWorkspace,
                        queryCommand.DataSpace,
                        newQuery);
                }
            }
        }

        private class StringTrimmerQueryVisitor : DefaultExpressionVisitor
        {
            private static readonly string[] _typesToTrim = { "nvarchar", "varchar", "char", "nchar" };

            public override DbExpression Visit(DbNewInstanceExpression expression)
            {
                var arguments = expression.Arguments.Select(a =>
                {
                    var propertyArg = a as DbPropertyExpression;
                    if (propertyArg != null && _typesToTrim.Contains(propertyArg.Property.TypeUsage.EdmType.Name))
                    {
                        return EdmFunctions.Trim(a);
                    }

                    return a;
                });

                return DbExpressionBuilder.New(expression.ResultType, arguments);
            }
        }
    }
}

using System.Data.Entity;

namespace FixedLengthDemo
{
    public class MyConfiguration : DbConfiguration
    {
        public MyConfiguration()
        {
            AddInterceptor(new StringTrimmerInterceptor());
        }
    }
}

위 내용은 인터셉터를 사용하여 Entity Framework에서 Char(N) 값을 자동으로 자르는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.