من دو Model دارم که تقریبا پراپرتی های مشترکی دارند(کاملا یکی نیستن)
هدفم اینه کاربر هر فیلدی از Model اول را ویرایش کرد(از طریق Form) همون فیلد توی Model دوم نیز آپدیت بشه.
به فرض اینکه بدونم کاربر کدوم تکست باکس ها رو Edit کرده، مشکل اینجاست که برای model باید نام پراپرتی رو استاتیک تعریف کرد:
public IActionResult Index(MyModel model)
{
List<string> propList = new List<string> { "Name", "Family" };
foreach (var item in propList)
{
model.Name = "Test1";// حالت پیشفرض که استاتیک هست
model.item = "Test1"; //حالت داینامیک که قابل قبول نیست
}
}
دوستان چه راهی به نظرتون میرسه که یا اسم پراپرتی رو داینامیک بدیم به مدل یا بعد از دستور آپدیت فهمیم کدوم فیلدها Modify شدن؟
نکته : من از الگوی Unit Of Work استفاده میکنم.
مثال :
یه مدل داریم که دارای پراپرتی های زیر میباشد:
- نام
-فامیلی
- کد ملی
مدل دوم ما از پرارپرتی های زیر تشکیل شده:
- نام
- فامیلی
-کد ملی
- تاریخ تولد
من میخوام مثلا کاربر وقتی فقط "نام" را ویرایش کرد، توی مدل دوم فقط "نام" ویرایش بشه و کل مدل آپدیت نشه.
بنظرم برای انجام این کار باید با شرط کنترل کنید
public void Update(string name, string family, int age, int id)
{
var result = (from r in _context.users where r.id == id select r);
var current = result.FirstOrDefault();
if (result.Count() != 0)
{
if (name != null)
{
current.name = name;
}
if (family != null)
{
current.family = family ;
}
if (age != 0)
{
current.age = age ;
}
_context.users.Attach(current);
_context.Entry(current).State = Microsoft.EntityFrameworkCore.EntityState.Modified;
_context.SaveChanges();
}
}
بنظرم راه حلش این باشه . شما میتونید یک رکورد رو هم کامل آپدیت کنید ولی در اون صورت هم تک تک فیلدها آپدیت میشن.
آیا امکانش هست که همراه مدل فقط چند پراپرتی رو برای آپدیت ارسال کنیم؟
چون من از روش پست قبل استفاده کردم. پراپرتی هایی که با شرط IF مقدار دهی میکنیم اوکی هستند ولی پراپرتی هایی که مقداردهی نمیکنیم null ارسال میشن.
من میخوام فقط همونایی که مقداردهی کردیم ارسال بشن.
با تشکر.
مشکل حل شد.
یه repository جدا ساختم و توی اون هندل کردم که پراپرتی های null رو Modify نکنه.
هرچند کد نویسی زیاد شد ولی خب جواب داد.
تاریخ :
1403/08/29
- ساعت :
07:15:00 PM
- بازدید :
76
- پاسخ :
0
|
تاریخ :
1403/08/18
- ساعت :
10:40:00 AM
- بازدید :
109
- پاسخ :
0
|
تاریخ :
1402/07/23
- ساعت :
04:01:00 PM
- بازدید :
1033
- پاسخ :
1
|
تاریخ :
1403/05/30
- ساعت :
09:22:00 AM
- بازدید :
429
- پاسخ :
1
|
تاریخ :
1402/08/16
- ساعت :
10:38:00 AM
- بازدید :
1356
- پاسخ :
1
|
تاریخ :
1398/08/17
- ساعت :
01:27:00 AM
- بازدید :
4798
- پاسخ :
1
|
تاریخ :
1403/07/27
- ساعت :
03:21:00 PM
- بازدید :
214
- پاسخ :
1
|
تاریخ :
1403/07/26
- ساعت :
09:00:00 PM
- بازدید :
117
- پاسخ :
0
|
تاریخ :
1403/05/16
- ساعت :
09:57:00 AM
- بازدید :
396
- پاسخ :
2
|
تاریخ :
1403/06/25
- ساعت :
11:39:00 PM
- بازدید :
567
- پاسخ :
1
|
تاریخ :
1401/02/24
- ساعت :
02:17:00 PM
- بازدید :
2011
- پاسخ :
1
|
تاریخ :
1403/08/29
- ساعت :
07:15:00 PM
- بازدید :
76
- پاسخ :
0
|
تاریخ :
1403/08/18
- ساعت :
10:40:00 AM
- بازدید :
109
- پاسخ :
0
|
تاریخ :
1402/07/23
- ساعت :
04:01:00 PM
- بازدید :
1033
- پاسخ :
1
|
تاریخ :
1403/05/30
- ساعت :
09:22:00 AM
- بازدید :
429
- پاسخ :
1
|
تاریخ :
1402/08/01
- ساعت :
06:25:00 PM
- بازدید :
930
- پاسخ :
1
|
تاریخ :
1402/08/16
- ساعت :
10:38:00 AM
- بازدید :
1356
- پاسخ :
1
|
تاریخ :
1398/08/17
- ساعت :
01:27:00 AM
- بازدید :
4798
- پاسخ :
1
|
تاریخ :
1402/09/08
- ساعت :
07:34:00 PM
- بازدید :
1160
- پاسخ :
1
|
تاریخ :
1402/09/21
- ساعت :
11:10:00 PM
- بازدید :
597
- پاسخ :
1
|