我有简单的数据库模型:
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; }
}
在定义 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");
});
}
我希望这有帮助