Null شدن property بعد از Post
دوستان سلام ، تو یک پروژه asp.net core
دو تا کلاس دارم با مشخصاتی شبیه این :
Public Class Charge
{
int Id
int Name
[ForeignKey("ChargeGroup")]
public int ChargeGroupId;
[ForeignKey("ChargeGroupId")]
public virtual ChargeGroup ChargeGroup { get; set; }
}
و
Public class ChargeGroup
{
int ChargeGroupId
Int Name
}
اما مشکل :
1- درست نمی دونم Foreign Key رو باید روی Id بزارم یا Navigation property
2- توی یک صفحه دارم توسط یک combobox مقدار chargeGroupId رو تغییر میدم و فرم Post میشه.
توی کروم می بینم که مقدار جدید اعمال شده ولی chargeGroup به صورت null درومده ولی زمانی که میرسه به controller مقدار chargeGroupID هم 0 شده که انگار همون null باشه.
4 پاسخ
هر دو حالت رو میشه در نظر گرفت، یعنی هم می تونید به Navigation بگید که ForeignKey کدومه و هم بالعکس، هر دو از ForeignKey استفاده می کنن، اگر روی Navigation باشه نام ForiegnKey و اگر روی ForeignKey باشه نام Navigation رو باید بهش بدید.
ممنون از لطفتون ! باورم نمیشه یه اشتباه ساده چقدر وقتم رو گرفته بود !
ضمنا این ForeignKey رو باید روی کدوم property بزارم ؟ قبلا دیده بودم روی Navigation می گفتند که IDش چیه ، امروز دو تا مثال دیدم که روی ID هم گفته بودن که Navigation مربوطه چیه.
سلام، وقت بخیر
مشکل به این خاطر هست که شما خصوصیت تعریف نکردید، زمانی که داخل مدل فیلد تعریف میکنید ModelBinder امکان ست کردن مقدار رو برای Field نداره، تبدیلش کنید به Property مشکل حل میشه.
Public Class Charge
{
int Id
int Name
[ForeignKey("ChargeGroup")]
public int ChargeGroupId {get;set;}
[ForeignKey("ChargeGroupId")]
public virtual ChargeGroup ChargeGroup { get; set; }
}
یه مشکل دیگه هم این وسط پیدا شده !
برای اینکه Navigation Property ها load بشن ( و ضمنا توسط serialization دچار loop نشه) از روش زیر استفاده کردم .
public List GetAll(bool activeOnly)
{
if (activeOnly)
return _context.Charges
.Where(c => c.IsActive).OrderBy(c => c.Name)
.Include(c => c.ChargeGroup)
.Include(c => c.ChargeRevType)
.Include(c => c.ChargePaymentTerm)
.Include(c => c.ChargeCashableDepositType)
.ToList();
حالا مشکل اینه که اگه include رو بزارم با اینکه ChargeGroupId رو تغییر میدم ، زمان _context.Update(charge);
تغییرات اعمال نمیشه !!! و انگار از NAVIGATION PROPERTY خونده میشه !
ضمنا متوجه شدم وضعیت MODIFIED برای ChargeGroupId کلا FALSE هستش ! عجیب نیست ؟