ホームページ >データベース >mysql チュートリアル >インターセプターを使用して Entity Framework で Char(N) 値を自動的にトリミングする方法
Entity Framework インターセプターを使用した Char(N) 値の自動トリミング
このシナリオでは、テキスト値が次のように格納されるという課題に直面しています。外部データベースの char(N) フィールドは、Entity Framework で取得するときに自動的にトリミングする必要がある(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 中国語 Web サイトの他の関連記事を参照してください。