数据库中的代码优先不会在 dbContext 的构建器中创建主键

Code first from database doesn't create the primary key in the builder of the dbContext

我有一个Sqlite数据库,我已经安装了Sqlite v1.0.99.0。为了创建我的连接,我首先使用数据库中的代码,但是在 dbContext 中,在使用流利设置实体之间关系的方法中,未设置主键,所以当我尝试时出现错误运行我的申请。

有什么方法可以使用代码优先从数据库中设置主键以避免必须在实体中设置主键?

谢谢。

唉,你忘了显示描述你的实体的 class 和包含这个 class 的 DbContext。

可以在 "A beginner's guide to entity framework code first"

中找到很好的初学者描述

在这里您可以看到,如果您遵循某些约定,则不必显式定义主键。 Entity framework 为您完成。

您经常会看到包含博客的数据库示例,其中每个博客都有零个或多个 post。博客和 post 将有一个主键 ID,post 有一个指向博客 ID 的外键。

如果您不想指定包含主键的属性,也不想指定包含外键的属性,请按如下方式定义您的 classes:

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

    public virtual ICollection<Post> Posts {get; set;}
    ...
}
public class Post
{
    public int Id {get; set;}

    public int BlogId {get; set;}
    public virtual Blog Blog {get; set;}
    ...
}

public class MyDbContext : DbContext
{
    public virtual DbSet<Blog> Blogs {get; set;}
    public virtual DbSet<Post> Posts {get; set;}
}

在上面的代码中,属性 Id 将自动成为 Blog 和 Post 实体的主键。如果需要,您可以决定使用 属性 名称 Blog.BlogId 和 Post.PostId。我个人不喜欢这个,因为这意味着我所有的主键都有不同的标识符。

属性 Post.BlogId 将自动成为 post 所属博客的外键。