집 >데이터 베이스 >MySQL 튜토리얼 >인터셉터를 사용하여 Entity Framework에서 Char(N) 값을 자동으로 자르는 방법은 무엇입니까?
Entity Framework 인터셉터를 사용하여 Char(N) 값 자동 자르기
이 시나리오에서는 텍스트 값이 다음과 같이 저장되는 문제에 직면합니다. Entity Framework에서 검색할 때 외부 데이터베이스의 char(N) 필드를 자동으로 잘라야 합니다. (EF).
다행히 EF 6.1에서는 인터셉터를 사용한 솔루션을 제공합니다. Microsoft의 Entity Framework 프로그램 관리자인 Rowan Miller가 설명한 대로 인터셉터를 사용하면 모델의 문자열 속성에서 후행 공백을 자동으로 잘라낼 수 있습니다.
이 솔루션을 구현하려면 다음 단계를 따르세요.
// Omitted for brevity (see full code provided below)
// 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!