C# 代码优先:EntityType';xxxx和x27;没有定义键。添加n对n关系时定义此EntityType的键

C# 代码优先:EntityType';xxxx和x27;没有定义键。添加n对n关系时定义此EntityType的键,c#,asp.net,asp.net-mvc,asp.net-mvc-5,entity-framework-6,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 5,Entity Framework 6,我是MVC新手,我正在遵循一个指南,在互联网上创建一个带有代码优先和个人用户帐户身份验证的MVC项目。但当我将模型更改为多对多关系时,我得到了 MyFirstASP\u MVC\u API.Models.BookAuthor::EntityType“BookAuthor”未定义键。定义此EntityType的键。 BookAuthors:EntityType:EntitySet“BookAuthors”基于未定义键的类型“BookAuthor” 这是我的课 public class Author

我是MVC新手,我正在遵循一个指南,在互联网上创建一个带有代码优先和个人用户帐户身份验证的MVC项目。但当我将模型更改为多对多关系时,我得到了

MyFirstASP\u MVC\u API.Models.BookAuthor::EntityType“BookAuthor”未定义键。定义此EntityType的键。 BookAuthors:EntityType:EntitySet“BookAuthors”基于未定义键的类型“BookAuthor”

这是我的课

public class Author
    {
        public int Id { get; set; }

        [Required]
        [StringLength(100)]
        public string Name { get; set; }

        [StringLength(1000)]
        public string Description { get; set; }

        public bool IsActive { get; set; }


        public ICollection<BookAuthor> BookAuthors { get; set; }
    }
我使用了
IdentityModel.cs

 public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
    {
        public DbSet<Book> Books { get; set; }
        public DbSet<Author> Authors { get; set; }
        public DbSet<Publisher> Publishers { get; set; }
        public DbSet<Category> Categories { get; set; }
        public DbSet<BookCategory> BookCategories { get; set; }
        public DbSet<BookAuthor> BookAuthors { get; set; }
        public ApplicationDbContext()
            : base("DefaultConnection", throwIfV1Schema: false)
        {
        }
        public static ApplicationDbContext Create()
        {
            return new ApplicationDbContext();
        }
    }
public类ApplicationDbContext:IdentityDbContext
{
公共数据库集书籍{get;set;}
公共数据库集作者{get;set;}
公共数据库集发布程序{get;set;}
公共数据库集类别{get;set;}
公共数据库集图书类别{get;set;}
公共DbSet BookAuthors{get;set;}
公共应用程序上下文()
:base(“DefaultConnection”,throwifvv1schema:false)
{
}
公共静态应用程序上下文创建()
{
返回新的ApplicationDbContext();
}
}
我读过一些关于解决这个问题的文章,他们在模型创建时使用了
,但没有一个使用
ApplicationDbContext
,所以我不知道我真的应该将它添加到
ApplicationDbContext
中。
那么,我应该怎么做,我需要创建新的DbContext吗?

一个作者可以有多本书,因此您应该在您的作者实体中定义一个图书集合:

public ICollection<Book> Books { get; set; }
公共ICollection图书{get;set;}
一本书实际上可以有多个作者(不确定在您的案例中是否相同),但如果是,您应该在图书实体中声明一个作者集合:

public ICollection<Author> Authors { get; set; }
公共ICollection

此外,如果您想了解更多信息,还有大量可用资源:


祝你好运

可能重复-
将[Key]注释放置在所选属性的顶部。
@mjwills我尝试在我的
BookId
AuthorId
上添加[Key],但VS显示了这一点,
无法确定“MyFirstASP\U MVC\U API.Models.BookAuthor”类型的复合主键顺序。使用ColumnAttribute(请参见http://go.microsoft.com/fwlink/?LinkId=386388)或HasKey方法(参见http://go.microsoft.com/fwlink/?LinkId=386387)要指定复合主键的顺序
,该错误会告诉您如何@V.Lap。你试过它建议的方法了吗?对于HasKey方法,正如我在上面注意到的,我不知道我可以重写ApplicationDbContext中的OnModelCreating方法,它是由VS自动生成的,因为我在网上找到的所有问题都使用了另一个DbContext。你读过了吗?它建议做什么?
public ICollection<Book> Books { get; set; }
public ICollection<Author> Authors { get; set; }