实体框架迁移主键错误

问题描述 投票:0回答:1

我有简单的数据库模型:

public class Recipe
{   
    public int id { get; set; }
    public string title { get; set; }
    public string description { get; set; }
    public String imageUrl { get; set; }
    public Nutrition nutrition { get; set; }
}

public class Nutrition
{
    public int id { get; set; }
    public double calories { get; set; }
    public double caloriesDailyNormPercentage { get; set; }
    public double protein { get; set; }
    public double proteinDailyNormPercentage { get; set; }
}

当我尝试进行迁移时,出现错误:

实体类型“营养”需要定义主键。如果您打算使用无键实体类型,请在“OnModelCreating”中调用“HasNoKey”

我已经尝试了互联网上的所有解决方案。我尝试添加

[Key]
[ForeignKey()]
- 没有任何效果。

public class DataContext : DbContext
{
    protected override void OnConfiguring(DbContextOptionsBuilder options)
        => options.UseNpgsql("Host=localhost; Database=recepts; Username=postgres; Password=31029");

    public DbSet<Recipe> Recipes { get; set; }
    public DbSet<Nutrition> Nutritions { get; set; }
}
c# entity-framework
1个回答
0
投票

在定义 DbContext 时,有一些重要的项目:

a.如果相关表有主键,则应使用 [Key] 数据注释来通知编译器该类用于映射表列,例如如果数据库表有 Id 列作为主键,则应在前面使用 [Key] 行定义它

或者重写DbContext中的OnModelCreating方法,并将[HasKey]添加到函数中的表映射中:

modelBuilder.Entity<YourEntity>()
    .HasKey(p => new p.Id);

b.如果相关表没有主键,则应重写 DbContext 中的 OnModelCreating 方法,并在函数中将 [HasNoKey] 添加到表映射中:

 protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
    modelBuilder
    .Entity<MyEntity>(builder =>
    {
        builder.HasNoKey();
        builder.ToTable("MY_ENTITY");
    });
    }

我希望这有帮助

© www.soinside.com 2019 - 2024. All rights reserved.