70٪ تخفیف ویژه جشنواره تابستانه توسینسو
پایان تخفیف تا:
مشاهده دوره‌ها
0

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 باشه.

 

پرسیده شده در 1398/12/21 توسط

4 پاسخ

1

هر دو حالت رو میشه در نظر گرفت، یعنی هم می تونید به Navigation بگید که ForeignKey کدومه و هم بالعکس، هر دو از ForeignKey استفاده می کنن، اگر روی Navigation باشه نام ForiegnKey و اگر روی ForeignKey باشه نام Navigation رو باید بهش بدید.

پاسخ در 1398/12/21 توسط
0

ممنون از لطفتون ! باورم نمیشه یه اشتباه ساده چقدر وقتم رو گرفته بود !

ضمنا این ForeignKey رو باید روی کدوم property بزارم ؟ قبلا دیده بودم روی Navigation می گفتند که IDش چیه ، امروز دو تا مثال دیدم که روی ID هم گفته بودن که Navigation مربوطه چیه.

 

پاسخ در 1398/12/21 توسط
1

سلام، وقت بخیر

مشکل به این خاطر هست که شما خصوصیت تعریف نکردید، زمانی که داخل مدل فیلد تعریف میکنید 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; }
}
پاسخ در 1398/12/21 توسط
0

یه مشکل دیگه هم این وسط پیدا شده !

برای اینکه 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 هستش ! عجیب نیست ؟

پاسخ در 1398/12/22 توسط

پاسخ شما