Çözüldü ASP.net MVC "New transaction is not allowed" hatası

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

Sinan Uğurlu

Kilopat
Katılım
30 Mayıs 2018
Mesajlar
504
Çözümler
12
Yer
Datacenter
Daha fazla  
Cinsiyet
Erkek
Meslek
Yazılım ve Ağ Altyapı Danış.
İyi akşamlar, ASP.net MVC'de kullanıcı silmek için bir sayfa oluşturdum, 2 adet tablom var; 1.tablom Identity sisteminin oluşturduğu "ASP.nerUsers" isimli tablo 2. tablo ise benim kendi oluşturduğum "roleUser" isimli tablo. Controller'da komutu başlattığımda "ASP.netUsers" isimli tablodan kullanıcı siliniyor, ancak benim oluşturduğum tablodan kullanıcı silinmiyor. Tarayıcıda aldığım hata ve kaynak kod ekte mevcuttur. Acaba hatayı nerde yaptım?

Kaynak Kod;
ASP.net:
[HttpPost]
        public async Task<ActionResult> Sil(string id)
        {
            var userDurum = db.roleUser.Where(u => u.username == User.Identity.Name);
            foreach (var item in userDurum)
            {
                if (item.username == User.Identity.Name)
                {
                    if (item.roleKullaniciSil == true)
                    {
                        if (id == null)
                        {
                            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
                        }

                        var user = await userManager.FindByIdAsync(id);
                        var logins = user.Logins;
                        foreach (var login in logins.ToList())
                        {
                            await userManager.RemoveLoginAsync(login.UserId, new UserLoginInfo(login.LoginProvider, login.ProviderKey));
                        }
                        await userManager.DeleteAsync(user);
                        //var deleteRol = db.roleUser.Where(u => u.userid == id).FirstOrDefault();
                        var silKayit = (from y in db.roleUser where y.userid == id select y).FirstOrDefault();
                        db.roleUser.Remove(silKayit);
                        db.SaveChanges();
                        Response.Redirect("/Oturum/Kullanicilar?u=" + id);

                    }
                    else
                    {
                        Response.Redirect("/Hata/Kod?k=605");
                    }
                }
            }

            KullaniciModel model = new KullaniciModel();
            model.userBilgi = userManager.Users.ToList();
            model.roleYetki = db.roleUser.ToList();
            return View(model);
        }
 

Dosya Ekleri

  • Ekran görüntüsü 2022-11-17 210401.png
    Ekran görüntüsü 2022-11-17 210401.png
    189,1 KB · Görüntüleme: 57
Çözüm
Arkadaşlar sorunu çözdüm ama nasıl çözdüğümü bende bilmiyorum 😆 foreach döngüsünden çıkardım ve kodu ekteki şekilde düzelttim. Eğer çözebilen varsa banada açıklasın lütfen.

ASP.net:
        [HttpPost]
        public async Task<ActionResult> Sil(string id)
        {
            var userDurum = db.roleUser.Where(u => u.username == User.Identity.Name);
            bool result = false;
            foreach (var item in userDurum)
            {
                if (item.username == User.Identity.Name)
                {
                    if (item.roleKullaniciSil == true)
                    {
                        if (id == null)
                        {
                            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
                        }

                        var user = await userManager.FindByIdAsync(id);
                        var logins = user.Logins;
                        foreach (var login in logins.ToList())
                        {
                            await userManager.RemoveLoginAsync(login.UserId, new UserLoginInfo(login.LoginProvider, login.ProviderKey));
                        }
                        await userManager.DeleteAsync(user);
                        result = true;

                    }
                    else
                    {
                        result = false;
                    }
                }
            }
            if (result == true)
            {
                var deleteRol = db.roleUser.Where(u => u.userid == id).FirstOrDefault();
                db.roleUser.Remove(deleteRol);
                db.SaveChanges();
                Response.Redirect("/Ayarlar/Kullanicilar");
            }
            else
            {
                Response.Redirect("/Ayarlar/Kullanicilar?h=roleSilinemedi");
            }

            KullaniciModel model = new KullaniciModel();
            model.userBilgi = userManager.Users.ToList();
            model.roleYetki = db.roleUser.ToList();
            return View(model);
        }
Hem db nesnesinden hem de userManager nesnesinden veritabanına erişim sağlıyorsun galiba. Muhtemelen bu yüzden hata veriyor. userManager içerisinde yeni bir db nesnesi oluşturuyor musun? İşlemleri sadece db nesnesi üzerinden ya da userManager nesnesi üzerinden yapmayı dene.
 
//var deleteRol = db.roleUser.Where(u => u.userid == id).FirstOrDefault();
var silKayit = (from y in db.roleUser where y.userid == id select y).FirstOrDefault();
üsteki kapalı kodu çalıştır alttaki saçma sapan bişey olmuş
 
Arkadaşlar sorunu çözdüm ama nasıl çözdüğümü bende bilmiyorum 😆 foreach döngüsünden çıkardım ve kodu ekteki şekilde düzelttim. Eğer çözebilen varsa banada açıklasın lütfen.

ASP.net:
        [HttpPost]
        public async Task<ActionResult> Sil(string id)
        {
            var userDurum = db.roleUser.Where(u => u.username == User.Identity.Name);
            bool result = false;
            foreach (var item in userDurum)
            {
                if (item.username == User.Identity.Name)
                {
                    if (item.roleKullaniciSil == true)
                    {
                        if (id == null)
                        {
                            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
                        }

                        var user = await userManager.FindByIdAsync(id);
                        var logins = user.Logins;
                        foreach (var login in logins.ToList())
                        {
                            await userManager.RemoveLoginAsync(login.UserId, new UserLoginInfo(login.LoginProvider, login.ProviderKey));
                        }
                        await userManager.DeleteAsync(user);
                        result = true;

                    }
                    else
                    {
                        result = false;
                    }
                }
            }
            if (result == true)
            {
                var deleteRol = db.roleUser.Where(u => u.userid == id).FirstOrDefault();
                db.roleUser.Remove(deleteRol);
                db.SaveChanges();
                Response.Redirect("/Ayarlar/Kullanicilar");
            }
            else
            {
                Response.Redirect("/Ayarlar/Kullanicilar?h=roleSilinemedi");
            }

            KullaniciModel model = new KullaniciModel();
            model.userBilgi = userManager.Users.ToList();
            model.roleYetki = db.roleUser.ToList();
            return View(model);
        }
 
Çözüm

Technopat Haberler

Geri
Yukarı