Heim > Datenbank > MySQL-Tutorial > Wie kürze ich Char(N)-Werte im Entity Framework mithilfe von Interceptors automatisch?

Wie kürze ich Char(N)-Werte im Entity Framework mithilfe von Interceptors automatisch?

Barbara Streisand
Freigeben: 2024-12-29 13:32:10
Original
359 Leute haben es durchsucht

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

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:

  1. Definieren Sie eine StringTrimmerInterceptor-Klasse wie folgt:
// Omitted for brevity (see full code provided below)
Nach dem Login kopieren
Nach dem Login kopieren
  1. Erstellen Sie eine MyConfiguration-Klasse zum Registrieren des Interceptors bei EF:
// Omitted for brevity (see full code provided below)
Nach dem Login kopieren
Nach dem Login kopieren

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());
        }
    }
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage