我有一个现有的数据库,我想以最简单的方式使用Entity Framework Code First。它只是一个小型数据库。
我创建了一个镜像数据库表的简单POCO类:
e.g。
public class Author
{
[Key]
public int AuthorID { get; set; }
public string AuthorName { get; set; }
public virtual ICollection<Books> Books { get; set; }
}
public class Books
{
[Key]
public int BookID { get; set; }
public string BookName { get; set; }
public int AuthorID { get; set; }
}
DbContext如下:
public class Entities : DbContext
{
public Entities(string connString)
: base(connString)
{
}
public DbSet<Author> Authors { get; set; }
public DbSet<Books> Books { get; set; }
当我运行我的应用程序,并从我的数据库中选择第一个作者时,将正确填充AuthorID和AuthorName属性。但是,未填充书籍集。相反,类型为&#39; System.Data.EntityCommandExecutionException&#39;以及内部例外:&#39;无效的列名称&#39; Author_AuthorID&#39;。
如何正确建立作者和图书之间的链接? (即一个到多个,一个作者可以有很多书)。我已经非常简单地创建了Code First - 没有任何迁移或自动生成,并希望保持简单。
非常感谢您的帮助, 马丁
答案 0 :(得分:1)
在与作者表关联的上下文中,添加Author
属性(不带单AuthorID
属性无关紧要。):
public class Books
{
[Key]
public int BookID { get; set; }
public string BookName { get; set; }
public int AuthorID { get; set; }
//add this(attribute is not needed if you use EF6 or higher):
[ForeignKey("AuthorID")]
public virtual Author Author { get; set; }
}
答案 1 :(得分:1)
Fluent API方法:
modelBuilder.Entity<Author>().HasMany(a => a.Books).WithRequired().HasForeignKey(b => b.AuthorID);
更新: 使用这种流畅的API,您不必在课堂书籍中添加属性作者
如果要将Books设置为不需要,则必须将属性AuthorID设置为int?
modelBuilder.Entity<Author>().HasMany(a => a.Books).HasForeignKey(b => b.AuthorID);
图书课程:
public class Books
{
[Key]
public int BookID { get; set; }
public string BookName { get; set; }
public int? AuthorID { get; set; }
}
答案 2 :(得分:0)
嗯,这很令人尴尬,我在帖子后几分钟找到答案。我会发布答案,而不是删除我的问题以防其他人帮助:
public class Books
{
[Key]
public int BookID { get; set; }
public string BookName { get; set; }
[ForeignKey("Author")]
public int AuthorID { get; set; }
public Author Author { get; set; }
}