当前位置:  开发笔记 > 编程语言 > 正文

EntityType'IdentityUserLogin'没有定义键.定义此EntityType的键

如何解决《EntityType'IdentityUserLogin'没有定义键.定义此EntityType的键》经验,为你挑选了1个好方法。

我在尝试创建商家时遇到这些错误.

FlavorPing.Models.IdentityUserLogin: : EntityType 'IdentityUserLogin' has no key defined. Define the key for this EntityType.

FlavorPing.Models.IdentityUserRole: : EntityType 'IdentityUserRole' has no key defined. Define the key for this EntityType.

UserLogins: EntityType: EntitySet 'UserLogins' is based on type 'IdentityUserLogin' that has no keys defined.

UserRoles: EntityType: EntitySet 'UserRoles' is based on type 'IdentityUserRole' that has no keys defined."

这是我的商家模型:

namespace FlavorPing.Models
{
    public class Merchant
    {
        //Meant to inherit identity.
        //[ForeignKey("ApplicationUserId")]
        public string ApplicationUserId { get; set; }
        [ForeignKey("ApplicationUser")]
        public virtual List ApplicationUser { get; set; }


        [Key]
        public int MerchantID { get; set; }

        [Required]
        [Display(Name = "Business Name")]
        public string MerchantName { get; set; }

        [Required]
        [Display(Name = "Email")]
        [DataType(DataType.EmailAddress)]
        public string email { get; set; }

        //need to create formatting here.
        [Required]
        [Display(Name = "Web Site Link")]
        public string website { get; set; }

        //public int MenuItemID { get; set; }


        public virtual List MenuItems { get; set; }

        public virtual MerchantDetails MerchantDetails { get; set; }

        public ICollection FollowerMenuItemMerchants { get; set; }
    }
}

这是商家的创建控制器,这是我收到错误的地方:

// POST: Merchants/Create
// To protect from overposting attacks, please enable the specific properties you want to bind to, for 
// more details see http://go.microsoft.com/fwlink/?LinkId=317598.
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "MerchantID,MerchantName,email,website")] Merchant merchant)
{
    if (ModelState.IsValid)
    {
        merchant.ApplicationUserId = User.Identity.GetUserId();
        db.Merchants.Add(merchant);
        db.SaveChanges();
        return RedirectToAction("Index");
    }

    return View(merchant);
}

这是我的DBContext:

namespace FlavorPing.Models
{
    public class FlavorPingContext : IdentityDbContext
    {

        public FlavorPingContext()
            : base("name=FlavorPingContext")
        {
        }

        public System.Data.Entity.DbSet Merchants { get; set; }

        public System.Data.Entity.DbSet MenuItems { get; set; }

        public System.Data.Entity.DbSet MerchantDetails { get; set; }

        public System.Data.Entity.DbSet Followers { get; set; }

        public System.Data.Entity.DbSet FollowerMenuItemMerchants { get; set; }

        public DbSet UserLogins { get; set; }
        public DbSet UserClaims { get; set; }
        public DbSet UserRoles { get; set; }

        protected override void OnModelCreating(DbModelBuilder builder)
        {
            // Primary keys
            builder.Entity().HasKey(q => q.FollowerID);
            builder.Entity().HasKey(q => q.MenuItemID);
            builder.Entity().HasKey(q => q.MerchantID);
            builder.Entity().HasKey(q =>
                new
                {
                    q.FollowerID,
                    q.MenuItemID,
                    q.MerchantID
                });

            // Relationships
            builder.Entity()
                .HasRequired(t => t.Follower)
                .WithMany(t => t.FollowerMenuItemMerchants)
                .HasForeignKey(t => t.FollowerID);

            builder.Entity()
                .HasRequired(t => t.MenuItem)
                .WithMany(t => t.FollowerMenuItemMerchants)
                .HasForeignKey(t => t.MenuItemID);

            builder.Entity()
            .HasRequired(t => t.Merchant)
            .WithMany(t => t.FollowerMenuItemMerchants)
            .HasForeignKey(t => t.MerchantID);


            builder.Conventions.Remove();
            builder.Conventions.Remove();


        }
    }
}

我试图在这个链接中遵循示例(option2): EntityType'IdentityUserLogin'没有定义键.定义此EntityType的键

我正在尝试选项2,因为我想避免使用两个DB.但我是管理数据库的新手,所以如果你认为我应该做选项3,请告知为什么,或者如果你知道为什么我会收到这个错误,请告诉我原因.提前致谢!



1> JP Hochbaum..:

好的我通过将其添加到我的DBContext类中来修复我的问题.

    builder.Entity().HasKey(l => l.UserId);
    builder.Entity().HasKey(r => r.Id);
    builder.Entity().HasKey(r => new { r.RoleId, r.UserId });

推荐阅读
农大军乐团_697
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有