İpucu

Selamlar,

 

Linq ile uptade yapmaya çalşırken, FK  güncellemesi yapıyor iseniz ve Operation is not valid due to the current state of the object hatasını alma olasılığınız var. Hatanın sebebi ise siz güncelleme yapmak isterken veriyi db üzerinden çektiğiniz de linq objesi üzerinde ilişkili olduğu datayla geliyor. Böylece size güncelleme işlemini direk id üzerinden yapmanıza izin vermiyor.  Örnek verecek olursak,aşağıdaki bir linq enity si içerisindeki bir FK property sini görebilirsiniz.  Burada eğer ben kategori değiştirmek için,

 

subcat.CategoryId = 1;  gibi değişim yapacak olursam yukarıdaki hatayı alıyorum.  Güncellemeyi onun yerine id üzerinden değil doğrudan ilişkili olduğu entity üzerinden yapmamız gerekiyor. Aşağıdaki gibi bir değişim ise başarılı bir şekilde sonuçlanacaktır.

 

Kolay gelsin,

public int CategoryId

        {

            get

            {

                return this._CategoryId;

            }

            set

            {

                if ((this._CategoryId != value))

                {

                    if (this._Category.HasLoadedOrAssignedValue)

                    {

                        throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();

                    }

                    this.OnCategoryIdChanging(value);

                    this.SendPropertyChanging();

                    this._CategoryId = value;

                    this.SendPropertyChanged("CategoryId");

                    this.OnCategoryIdChanged();

                }

            }

        }

var catId = Convert.ToInt32(leKat.EditValue);

subcategory.Active = cbAktif.Checked;

subcategory.Entry = cbGiris.Checked;

subcategory.SubCategoryName = txtSubCat.Text;

subcategory.Category = _datacontext.Categories.Single(c => c.CategoryId == catId);

 //subcategory.CategoryId = Convert.ToInt32(leKat.EditValue); //hata direk atamaya izin vermiyor.

 _datacontext.SubmitChanges();

 DBLogHelper.InsertTableLog(subcategory, TableList.SubCategories, ActionTypeList.Update);