با این ویژگی میتوانیم نوع دادهای که در مدل دامین استفاده میکنیم را به نوع دادهای که در پایگاه داده ذخیره میشود تبدیل کنیم.
مثال: تبدیل bool به int
برای مثال یک مدل ساده داریم که شامل یک ویژگی IsActive است که به صورت bool تعریف شده است ولی میخواهیم آن را به عنوان یک int در پایگاه داده ذخیره کنیم.با استفاده از کلاس ValueConverter بصورت زیر مینویسیم.
public class MyEntity
{
public int Id { get; set; }
public bool IsActive { get; set; }
}
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
public class MyDbContext : DbContext
{
public DbSet<MyEntity> MyEntities { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
var boolToIntConverter = new ValueConverter<bool, int>(
v => v ? 1 : 0,
v => v == 1);
modelBuilder.Entity<MyEntity>()
.Property(e => e.IsActive)
.HasConversion(boolToIntConverter);
}
}
در این مثال:
v => v ? 1 : 0 بیان لامبدا برای تبدیل bool به int است.
v => v == 1 بیان لامبدا برای تبدیل int به bool است.
استفاده از Value Conversion با Data Annotations
تبدیل DateTime به long:
اگر بخواهید یک DateTime را به یک long (تعداد تیکها از تاریخ مبنا) تبدیل کنید و بالعکس:
var dateTimeToTicksConverter = new ValueConverter<DateTime, long>(
v => v.Ticks,
v => new DateTime(v));
modelBuilder.Entity<MyEntity>()
.Property(e => e.CreatedDate)
.HasConversion(dateTimeToTicksConverter);
}
تبدیل string به EncryptedString
میتوانیم رشتهها را قبل از ذخیرهسازی رمزنگاری کنیم و بعد از بازیابی رمزگشایی کنیم. برای این کار، ابتدا به یک تابع رمزنگاری نیاز داریم:
var stringToEncryptedStringConverter = new ValueConverter<string, string>(
v => Encryptor.Encrypt(v),
v => Encryptor.Decrypt(v));
modelBuilder.Entity<MyEntity>()
.Property(e => e.SensitiveData)
.HasConversion(stringToEncryptedStringConverter);
با این ویژگی میتوانیم نوع دادهای که در مدل دامین استفاده میکنیم را به نوع دادهای که در پایگاه داده ذخیره میشود تبدیل کنیم. مثال: تبدیل bool به int برای مثال یک مدل ساده داریم که شامل یک ویژگی IsActive است که به صورت bool تعریف شده است ولی میخواهیم آن را به عنوان یک int در پایگاه داده ذخیره کنیم.با استفاده از کلاس ValueConverter بصورت زیر مینویسیم.
public class MyEntity {
}
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
public class MyDbContext : DbContext {
}
در این مثال: v => v ? 1 : 0 بیان لامبدا برای تبدیل bool به int است. v => v == 1 بیان لامبدا برای تبدیل int به bool است.
استفاده از Value Conversion با Data Annotations تبدیل DateTime به long: اگر بخواهید یک DateTime را به یک long (تعداد تیکها از تاریخ مبنا) تبدیل کنید و بالعکس:
protected override void OnModelCreating(ModelBuilder modelBuilder) {
}
تبدیل string به EncryptedString میتوانیم رشتهها را قبل از ذخیرهسازی رمزنگاری کنیم و بعد از بازیابی رمزگشایی کنیم. برای این کار، ابتدا به یک تابع رمزنگاری نیاز داریم:
public static class Encryptor {
}
protected override void OnModelCreating(ModelBuilder modelBuilder) {
}