نمایش نتایج 1 تا 7 از 7

نام تاپیک: یکسان سازی حروف ی و ک در ASP.NET Core

Hybrid View

پست قبلی پست قبلی   پست بعدی پست بعدی
  1. #1
    بنیان گذار Barnamenevis آواتار مهدی کرامتی
    تاریخ عضویت
    اسفند 1381
    محل زندگی
    کرج، گلشهر
    سن
    48
    پست
    6,379

    نقل قول: یکسان سازی حروف ی و ک در ASP.NET Core

    نقل قول نوشته شده توسط hamzehsh مشاهده تاپیک
    من اینطوری مشکل رو حل کردم
    متد savechange رو overrid کردم



    public override async Task<int> SaveChangesAsync(CancellationToken cancellationToken = default(CancellationToken))
    {
    ApplyCorrectYeKe();
    return (await base.SaveChangesAsync(true, cancellationToken));
    }




    private void ApplyCorrectYeKe()
    {
    //پیدا کردن موجودیت‌های تغییر کرده
    var changedEntities = this.ChangeTracker
    .Entries()
    .Where(x => x.State == EntityState.Added || x.State == EntityState.Modified);


    foreach (var item in changedEntities)
    {
    if (item.Entity == null) continue;


    //یافتن خواص قابل تنظیم و رشته‌ای این موجودیت‌ها
    var propertyInfos = item.Entity.GetType().GetProperties(
    BindingFlags.Public | BindingFlags.Instance
    ).Where(p => p.CanRead && p.CanWrite && p.PropertyType == typeof(string));


    //var pr = new PropertyReflector();
    var pr = new PropertyReflector();


    //اعمال یکپارچگی نهایی
    foreach (var propertyInfo in propertyInfos)
    {
    var propName = propertyInfo.Name;
    var val = pr.GetValue(item.Entity, propName);
    if (val != null)
    {
    var newVal = val.ToString().Replace("ي", "ی").Replace("ك", "ک").Trim();
    if (newVal == val.ToString()) continue;
    pr.SetValue(item.Entity, propName, newVal);
    }
    }
    }
    }

    توضیح درباره روش جناب حمزه:
    متد override شده SaveChangesAsync ایشان میبایست به همین شکل در کلاس DbContext پروژه اضافه شود.

    من هم یک کمی دستکاری اش کردم و کد ایشان را به این شکل به یک Extension Method تبدیل کردم:
    public static class EfExtensions
    {
    public static DbContext FixArabicYeKaf(this DbContext db)
    {
    //پیدا کردن موجودیت‌های تغییر کرده
    var changedEntities = db.ChangeTracker
    .Entries()
    .Where(x => x.State == EntityState.Added || x.State == EntityState.Modified);


    foreach (var item in changedEntities)
    {
    if (item.Entity == null) continue;


    //یافتن خواص قابل تنظیم و رشته‌ای این موجودیت‌ها
    var propertyInfos = item.Entity.GetType().GetProperties(
    BindingFlags.Public | BindingFlags.Instance
    ).Where(p => p.CanRead && p.CanWrite && p.PropertyType == typeof(string));


    //var pr = new PropertyReflector();
    //var pr = new PropertyReflector();


    //اعمال یکپارچگی نهایی
    foreach (var propertyInfo in propertyInfos)
    {
    var propName = propertyInfo.Name;
    var val = propertyInfo.GetValue(item.Entity);
    if (val != null)
    {
    var newVal = val.ToString().Replace("ي", "ی").Replace("ك", "ک").Trim();
    if (newVal == val.ToString()) continue;
    propertyInfo.SetValue(item.Entity, newVal);
    }
    }
    }

    return db;
    }
    }

    برای فراخوانی اش هم متد override شده SaveChangeAsync رو به این شکل تغییر دادم:
    public override async Task<int> SaveChangesAsync(CancellationToken cancellationToken = default(CancellationToken))
    {
    this.FixArabicYeKaf();
    return (await base.SaveChangesAsync(true, cancellationToken));
    }

  2. #2
    کاربر دائمی آواتار hamzehsh
    تاریخ عضویت
    مرداد 1385
    محل زندگی
    https://samanhis.ir
    سن
    43
    پست
    166

    نقل قول: یکسان سازی حروف ی و ک در ASP.NET Core

    ممنونم استاد کرامتی عزیز

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •