با سلام
میخواهم اول در جدول جستجو کنم اگر نبود insert بشه و الا آپدیت بشه.
من این کد را مینویسم خطا میده. لطفا راهنمایی کنید.
int payCode = db.PAYMENTRepository.Get(p => p.FACTOR_NO == factor_code).Select(s => s.PAYMENT_SERIAL).Count();
if (payCode == 0)
{
db.PAYMENTRepository.Insert(pay);
}
else
{
int payCode1 = db.PAYMENTRepository.Get(p => p.FACTOR_NO == factor_code).Select(s => s.PAYMENT_SERIAL).First();
pay.PAYMENT_SERIAL = payCode1;
db.PAYMENTRepository.Update(pay);
}
متن خطا:
Additional information: Attaching an entity of type 'Resturant.DataLayer.PAYMENT' failed because another entity of the same type already has the same primary key value. This can happen when using the 'Attach' method or setting the state of an entity to 'Unchanged' or 'Modified' if any entities in the graph have conflicting key values. This may be because some entities are new and have not yet received database-generated key values. In this case use the 'Add' method or the 'Added' entity state to track the graph and then set the state of non-new entities to 'Unchanged' or 'Modified' as appropriate.
سلام
ابتدا Any بزیند داخل if و بعد از دستور ثبت استفاده کنید
if (!(db.PAYMENTRepository.Get(p => p.FACTOR_NO == factor_code).Any()))
{
db.PAYMENTRepository.Insert(pay);
}
else
{
var payCode = db.PAYMENTRepository.Get(p => p.FACTOR_NO == factor_code).First();
pay.PAYMENT_SERIAL = payCode.PAYMENT_SERIAL;
db.PAYMENTRepository.Update(pay);
db.Save();
}
سلام من این کد رو نوشتم اما باز خطا میده!!! میشه بیشتر راهنمایی کنید.
متن خطا ؟
An unhandled exception of type 'System.InvalidOperationException' occurred in EntityFramework.dll
Additional information: Attaching an entity of type 'Resturant.DataLayer.PAYMENT' failed because another entity of the same type already has the same primary key value. This can happen when using the 'Attach' method or setting the state of an entity to 'Unchanged' or 'Modified' if any entities in the graph have conflicting key values. This may be because some entities are new and have not yet received database-generated key values. In this case use the 'Add' method or the 'Added' entity state to track the graph and then set the state of non-new entities to 'Unchanged' or 'Modified' as appropriate.
به کلیدی اصلی جدول مشکل خورده
متد Update رو به شکل زیر تغییر دهید
public void UpdateComment(ArticleComment comment)
{
var local = db.Set<ArticleComment>()
.Local
.FirstOrDefault(f => f.CommantID == comment.CommantID);
if (local != null)
{
db.Entry(local).State = EntityState.Detached;
}
db.Entry(comment).State = EntityState.Modified;
}
ببخشید استاد اگر من میخوام توی ریپوزیتوری این رو بنویسم این کد رو نوشتم اما شرطش رو یاد ندارم.
public virtual void UpdateComment(TEntity entity)
{
var local = _db.Set<TEntity>()
.Local
.FirstOrDefault(f => f => f.CommantID == comment.CommantID);
if (local != null)
{
_db.Entry(local).State = EntityState.Detached;
}
_db.Entry(entity).State = EntityState.Modified;
}
این رو چطوری باید تغییر بدم؟
f => f.CommantID == comment.CommantID
باید entity را به جای comment قرار دهید
و از Find استفاده کنید تا خود ibject را جستجو کند