none
ASP.NET MVC Kullanıcı Login İşlemi Sorunu RRS feed

  • Genel Tartışma

  • Merhaba,

    Projemde kullandığım üyelik sisteminde Login işlemi yaptırmak istediğimde,

    Multiple object sets per type are not supported. The object sets 'ApplicationUsers' and 'Users' can both contain instances of type 'kAaNnNDesignProject.Models.ApplicationUser'. Hatasını almaktayım. Kodlar aşağıdaki gibidir.



    AccountController.cs
    [AllowAnonymous]
            public ActionResult Login()
            {
                if (String.IsNullOrEmpty(HttpContext.User.Identity.Name))
                {
                    FormsAuthentication.SignOut();
                    return View();
                }
                if (AuthenticationManager.User.Identity.IsAuthenticated)
                {
                    ViewBag.LoginControl = "true";
                }
                else
                {
                    ViewBag.LoginControl = "false";
                }
                return RedirectToAction("Index","Home");
            }
    
            //
            // POST: /Account/Login
            [HttpPost]
            [AllowAnonymous]
            [ValidateAntiForgeryToken]
            public ActionResult Login(LoginViewModel model)
            {
                var kullanici = UserManager.Find(model.Email, model.PasswordHash);
                if (kullanici != null)
                {
                    AuthenticationManager.SignOut();
                    var kimlik = UserManager.CreateIdentity(kullanici, DefaultAuthenticationTypes.ApplicationCookie);
                    ViewBag.LoginControl = "true";
                    return RedirectToAction("Index", "Home");
                }
                else
                {
                    ViewBag.LoginControl = "false";
                    ModelState.AddModelError("","E-Mail veya Şifre Hatalı");
                }
    
                return View(model);
            }


    ProjectContext.cs
    namespace kAaNnNDesignProject.Models
    {
        public class kAaNnNDesignProjectContext : DbContext
        {
            public kAaNnNDesignProjectContext() : base("KD_DataConnection") { }
            public DbSet<Categories> Kategoriler { get; set; }
            public DbSet<Subjects> Konular { get; set; }
            public DbSet<News> Haberler { get; set; }
            public DbSet<Notices> Duyurular { get; set; }
            public DbSet<Products> Urunler { get; set; }
            public DbSet<AspNetRoles> Roller { get; set; }
            public DbSet<AspNetUsers> Kullanicilar { get; set; }
            public DbSet<MoneyCurrencies> ParaBirimleri { get; set; }
            public DbSet<Comments> Yorumlar { get; set; }
                   
            protected override void OnModelCreating(DbModelBuilder modelBuilder)
            {
                modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
            }
        }
        public class kAaNnNDesignProjectdentityContext : IdentityDbContext<ApplicationUser>
        {
            public kAaNnNDesignProjectdentityContext() : base("KD_DataConnection") { }
    
            protected override void OnModelCreating(DbModelBuilder modelBuilder)
            {
                base.OnModelCreating(modelBuilder);
            }
        }
    }

    IdentityModel.cs
    namespace kAaNnNDesignProject.Models
    {
        // You can add profile data for the user by adding more properties to your ApplicationUser class, please visit http://go.microsoft.com/fwlink/?LinkID=317594 to learn more.
        public class ApplicationUser : IdentityUser
        {
            public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
            {
                // Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
                var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
                // Add custom user claims here
                return userIdentity;
            }
            public byte AccessFailedCount { get; set; }
            public string UserSurname { get; set; }
            public string Nickname { get; set; }
            public string Email { get; set; }
            public string PasswordHash { get; set; }
            public string SecurityQuestion { get; set; }
            public string SecurityAnswer { get; set; }
            public string Country { get; set; }
            public string City { get; set; }
            public DateTime CreateDate { get; set; }
            public string Details { get; set; }
            public string UserAvatar { get; set; }
            public DateTime UserBirthday { get; set; }
        }
    
        public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
        {
            public ApplicationDbContext()
                : base("KD_DataConnection", throwIfV1Schema: false)
            {
            }
    
            public static ApplicationDbContext Create()
            {
                return new ApplicationDbContext();
            }
            public System.Data.Entity.DbSet<kAaNnNDesignProject.Models.ApplicationUser> ApplicationUsers { get; set; }
    
        }
    }

    Hatanın sebebini araştırdım fakat çözümü bulamadım. Yardımcı olur musunuz?
    14 Ağustos 2016 Pazar 01:10

Tüm Yanıtlar

  • IdentityDbContext den neden iki defa referans eden contextin var ki? Birini ASP.NET identity oluşturmuş birini de sen oluşturmuşsun. Sanırım aynı nesneyi iki context de referans ediyor ve bu EF nin entitylerin state leri için takip mekanizması çakışıyor. Hata mesajında da sanırım bunu anlatıyor. Çoklu obje setleri her bir tipi desteklemez derken sanırım her bir tip çoklu obje setlerinde referans edilemez demek istiyor. Obje setleri 'ApplicationUsers' ve 'Users' her iki arabirimde bulunmakta ve tipi 'kAaNnNDesignProject.Models.ApplicationUser' dir derken de bu ApplicationUser nesnesini iki yerde birden kullanmışsın anlamında uyarı veriyor. Yalnız bir referansın adı 'ApplicationUsers' diğeri ise 'Users' imiş, ben Users adında referans bulamadım. Lakin çok mühim de değil iki tane identity contexti oluşturman sıkıntı olmuş olabilir. Hatırladığım kadarıyla EF nesnenin Hash alıp bunu takip ediyordu state için. Bu durumda nesneyi iki farklı context te referans etmen buna aykırı düşüyordur.

    Esenlikle...

    14 Ağustos 2016 Pazar 14:12