Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Memangkas Nilai Char(N) secara Automatik dalam Rangka Kerja Entiti Menggunakan Pemintas?
Memangkas Nilai Char(N) Secara Automatik dengan Pemintas Rangka Kerja Entiti
Dalam senario ini, anda menghadapi cabaran apabila nilai teks disimpan sebagai medan char(N) dalam pangkalan data luaran perlu dipangkas secara automatik apabila diambil dalam Rangka Kerja Entiti (EF).
Nasib baik, EF 6.1 menyediakan penyelesaian menggunakan Pemintas. Seperti yang dijelaskan oleh Rowan Miller, pengurus program untuk Rangka Kerja Entiti di Microsoft, Pemintas boleh digunakan untuk memangkas ruang putih mengekori secara automatik daripada sifat rentetan dalam model anda.
Untuk melaksanakan penyelesaian ini, ikut langkah berikut:
// Omitted for brevity (see full code provided below)
// Omitted for brevity (see full code provided below)
Dengan menambahkan pemintas dan kelas konfigurasi ini pada projek anda , EF secara automatik akan memangkas nilai rentetan yang diambil daripada medan char(N). Pemangkasan akan berlaku dalam pangkalan data, memastikan prestasi optimum.
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()); } } }
Atas ialah kandungan terperinci Bagaimana untuk Memangkas Nilai Char(N) secara Automatik dalam Rangka Kerja Entiti Menggunakan Pemintas?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!