Notice: file_put_contents(): Write of 9255 bytes failed with errno=28 No space left on device in /var/www/tgoop/post.php on line 50

Warning: file_put_contents(): Only 12288 of 21543 bytes written, possibly out of free disk space in /var/www/tgoop/post.php on line 50
Web Devs@fullStackDevs P.433
FULLSTACKDEVS Telegram 433
#Value_Conversions
#EFCore

🧩 Value Conversions

این ویژگی در EF Core 2.1 اضافه شد.
ویژگی Value Conversion امکان تبدیل مقادیر پراپرتی ها به تایپ های مشخص در هنگام خواندن یا نوشتن در دیتابیس را میدهد.
این تبدیل میتواند از یک نوع به همان نوع یا از یک نوع به نوع دیگر باشد مانند تبدیل مقادیر enum به string و برعکس.
برای مثال برای ذخیره مقادیر enum بصورت string به شکل زیر میتوانیم عمل کنیم :

public class Rider
{
public int Id { get; set; }
public EquineBeast Mount { get; set; }
}

public enum EquineBeast
{
Donkey,
Mule,
Horse,
Unicorn
}
و سپس برای اینکه مقادیر این enum در دیتابیس به صورت string ذخیره شود ، به این صورت "Donkey", "Mule" بایستی Value Conversion ای بدین شکل تعریف کنیم .
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder
.Entity<Rider>()
.Property(e => e.Mount)
.HasConversion(
v => v.ToString(),
v => (EquineBeast)Enum.Parse(typeof(EquineBeast), v));
}

یا به عنوان مثال حتما تا کنون برای شما پیش آمده که در درون Entity Class خود برای یک پراپرتی از Complex type استفاده کرده باشد.
مثلا برای نگه داری مقدار پول به جای استفاده از type های decimal یا int ، از یک custom type که خود انرا تعریف کرده اید استفاده کرده باشید.

public class MyEntity
{
...
public Money salary { get; set; }
//Money is a class, actually it's my custom type
}
برای ذخیره چنین type هایی در دیتابیس و واکشی انها در قالب custom type مان، میتوانیم از ویژگی Value conversion کمک بگریم.
برای انجام اینکار بایستی برای پراپرتی salary (در مثال بالا) یک ValueConverter در متد OnModelCreating در Context بسازیم اینکار به دو صورت قابل انجام است .
روش اول
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<MyEntity>()
.Property(b => b.Salary )
.HasConversion(
v => JsonConvert.SerializeObject(v),
v => JsonConvert.DeserializeObject<Money>(v));
}
و روش دوم
var converter = new ValueConverter<Money, string>(
v => JsonConvert.SerializeObject(v),
v => JsonConvert.DeserializeObject<Money>(v));

modelBuilder
.Entity<MyEntity>()
.Property(e => e.Salary)
.HasConversion(converter);

✔️ توجه داشته باشد که برای ذخیره شی Money در دیتابیس و واکشی آن از دیتابیس در قالب یک Money روال سریالایز و دیسریالایز کردن آن به Json نیازمند است.

روش دوم برای مواردی که دو پراپرتی از یک value converter استفاده میکنند مناسب است.
*نکته مقادیر null به value converter پاس داده نمیشوند.
خود Ef Core نیز کلاس های value converter از پیش تعریف شده ای دارد که در فضای نام
Microsoft.EntityFrameworkCore.Storage.ValueConversion
وجود دارند .که لیستی ار آنها را در این لینک میتوانید ببینید.به همین خاطر EF Core با دارا بودن لیستی از این value converter بسیاری از تبدیلات نوع ها به نوع های دیگر در هنگام ذخیره مقادیر در دیتابیس را به صورت اتوماتیک انجام میدهد در واقع این امر زمانی مشخص میشود که DataBase Provider خود را مشخص و کانفیگ میکنید.
مثلا مثال enum بالا را میتوانید با value converter های خود ef core انجام دهید.

var converter = new EnumToStringConverter<EquineBeast>();

modelBuilder
.Entity<Rider>()
.Property(e => e.Mount)
.HasConversion(converter);

🎯 و نکته اخر اینکه
با مشخص کردن نوع یک پراپرتی به صورت صریح به کمک اتریبیوت
 [Column(TypeName = "TypeName")]
می توان همین کار را انجام داد و Ef Core متوجه میشود که باید مقدار این پراپرتی رو در هنگام ذخیره در دیتابیس به نوع مورد نظر تبدیل کند.
این ویژگی هنوز محدودیت هایی دارد برای مثال :
-مقادیر null نمیتوانند تبدیل شوند
-امکان اعمال یک value converter به صورت کلی برای دسته ای از پراپرتی ها نیست و باید به صورت تک به تک اعمال شوند.
-استفاده از value conversions ممکن است توانایی EF Core را برای ترجمه عبارات به SQL تحت تأثیر قرار دهد.


@fullStackDevs



tgoop.com/fullStackDevs/433
Create:
Last Update:

#Value_Conversions
#EFCore

🧩 Value Conversions

این ویژگی در EF Core 2.1 اضافه شد.
ویژگی Value Conversion امکان تبدیل مقادیر پراپرتی ها به تایپ های مشخص در هنگام خواندن یا نوشتن در دیتابیس را میدهد.
این تبدیل میتواند از یک نوع به همان نوع یا از یک نوع به نوع دیگر باشد مانند تبدیل مقادیر enum به string و برعکس.
برای مثال برای ذخیره مقادیر enum بصورت string به شکل زیر میتوانیم عمل کنیم :

public class Rider
{
public int Id { get; set; }
public EquineBeast Mount { get; set; }
}

public enum EquineBeast
{
Donkey,
Mule,
Horse,
Unicorn
}
و سپس برای اینکه مقادیر این enum در دیتابیس به صورت string ذخیره شود ، به این صورت "Donkey", "Mule" بایستی Value Conversion ای بدین شکل تعریف کنیم .
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder
.Entity<Rider>()
.Property(e => e.Mount)
.HasConversion(
v => v.ToString(),
v => (EquineBeast)Enum.Parse(typeof(EquineBeast), v));
}

یا به عنوان مثال حتما تا کنون برای شما پیش آمده که در درون Entity Class خود برای یک پراپرتی از Complex type استفاده کرده باشد.
مثلا برای نگه داری مقدار پول به جای استفاده از type های decimal یا int ، از یک custom type که خود انرا تعریف کرده اید استفاده کرده باشید.

public class MyEntity
{
...
public Money salary { get; set; }
//Money is a class, actually it's my custom type
}
برای ذخیره چنین type هایی در دیتابیس و واکشی انها در قالب custom type مان، میتوانیم از ویژگی Value conversion کمک بگریم.
برای انجام اینکار بایستی برای پراپرتی salary (در مثال بالا) یک ValueConverter در متد OnModelCreating در Context بسازیم اینکار به دو صورت قابل انجام است .
روش اول
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<MyEntity>()
.Property(b => b.Salary )
.HasConversion(
v => JsonConvert.SerializeObject(v),
v => JsonConvert.DeserializeObject<Money>(v));
}
و روش دوم
var converter = new ValueConverter<Money, string>(
v => JsonConvert.SerializeObject(v),
v => JsonConvert.DeserializeObject<Money>(v));

modelBuilder
.Entity<MyEntity>()
.Property(e => e.Salary)
.HasConversion(converter);

✔️ توجه داشته باشد که برای ذخیره شی Money در دیتابیس و واکشی آن از دیتابیس در قالب یک Money روال سریالایز و دیسریالایز کردن آن به Json نیازمند است.

روش دوم برای مواردی که دو پراپرتی از یک value converter استفاده میکنند مناسب است.
*نکته مقادیر null به value converter پاس داده نمیشوند.
خود Ef Core نیز کلاس های value converter از پیش تعریف شده ای دارد که در فضای نام
Microsoft.EntityFrameworkCore.Storage.ValueConversion
وجود دارند .که لیستی ار آنها را در این لینک میتوانید ببینید.به همین خاطر EF Core با دارا بودن لیستی از این value converter بسیاری از تبدیلات نوع ها به نوع های دیگر در هنگام ذخیره مقادیر در دیتابیس را به صورت اتوماتیک انجام میدهد در واقع این امر زمانی مشخص میشود که DataBase Provider خود را مشخص و کانفیگ میکنید.
مثلا مثال enum بالا را میتوانید با value converter های خود ef core انجام دهید.

var converter = new EnumToStringConverter<EquineBeast>();

modelBuilder
.Entity<Rider>()
.Property(e => e.Mount)
.HasConversion(converter);

🎯 و نکته اخر اینکه
با مشخص کردن نوع یک پراپرتی به صورت صریح به کمک اتریبیوت
 [Column(TypeName = "TypeName")]
می توان همین کار را انجام داد و Ef Core متوجه میشود که باید مقدار این پراپرتی رو در هنگام ذخیره در دیتابیس به نوع مورد نظر تبدیل کند.
این ویژگی هنوز محدودیت هایی دارد برای مثال :
-مقادیر null نمیتوانند تبدیل شوند
-امکان اعمال یک value converter به صورت کلی برای دسته ای از پراپرتی ها نیست و باید به صورت تک به تک اعمال شوند.
-استفاده از value conversions ممکن است توانایی EF Core را برای ترجمه عبارات به SQL تحت تأثیر قرار دهد.


@fullStackDevs

BY Web Devs




Share with your friend now:
tgoop.com/fullStackDevs/433

View MORE
Open in Telegram


Telegram News

Date: |

Telegram message that reads: "Bear Market Screaming Therapy Group. You are only allowed to send screaming voice notes. Everything else = BAN. Text pics, videos, stickers, gif = BAN. Anything other than screaming = BAN. You think you are smart = BAN. Telegram Channels requirements & features Clear The initiatives announced by Perekopsky include monitoring the content in groups. According to the executive, posts identified as lacking context or as containing false information will be flagged as a potential source of disinformation. The content is then forwarded to Telegram's fact-checking channels for analysis and subsequent publication of verified information. Select: Settings – Manage Channel – Administrators – Add administrator. From your list of subscribers, select the correct user. A new window will appear on the screen. Check the rights you’re willing to give to your administrator.
from us


Telegram Web Devs
FROM American