Heim >Datenbank >MySQL-Tutorial >Wie kürze ich Char(N)-Werte im Entity Framework mithilfe von Interceptors automatisch?
Automatisches Trimmen von Char(N)-Werten mit Entity Framework Interceptors
In diesem Szenario stoßen Sie auf eine Herausforderung, bei der Textwerte als gespeichert werden char(N)-Felder in einer externen Datenbank müssen beim Abrufen in Entity Framework (EF) automatisch gekürzt werden.
Glücklicherweise EF 6.1 bietet eine Lösung mit Interceptors. Wie Rowan Miller, Programmmanager für Entity Framework bei Microsoft, erklärt, können Interceptors verwendet werden, um nachgestellte Leerzeichen automatisch aus Zeichenfolgeneigenschaften in Ihren Modellen zu entfernen.
Um diese Lösung zu implementieren, befolgen Sie diese Schritte:
// Omitted for brevity (see full code provided below)
// Omitted for brevity (see full code provided below)
Durch Hinzufügen dieses Interceptors und dieser Konfigurationsklasse zu Ihrem Projekt schneidet EF automatisch Zeichenfolgenwerte ab, die aus char(N)-Feldern abgerufen werden. Die Kürzung erfolgt in der Datenbank, um eine optimale Leistung sicherzustellen.
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()); } } }
Das obige ist der detaillierte Inhalt vonWie kürze ich Char(N)-Werte im Entity Framework mithilfe von Interceptors automatisch?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!