من اینطوری مشکل رو حل کردم
متد 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);
}
}
}
}