EF Core cómo agregar clave principal

Tengo esta definición de clase en Ef Core Model para SQLite.

public class Ejercicios : BaseModel { private int _TipoEjercicio; [Key] public int TipoEjercicio { get { return _TipoEjercicio; } set { SetProperty(ref _TipoEjercicio, value); } } private string _DescripcionEjercicio; public string DescripcionEjercicio { get { return _DescripcionEjercicio; } set { SetProperty(ref _DescripcionEjercicio, value); } } private string _HexForeColor; public string HexForeColor { get { return _HexForeColor; } set { SetProperty(ref _HexForeColor, value); } } private string _HexBackGroundColor; public string HexBackGroundColor { get { return _HexBackGroundColor; } set { SetProperty(ref _HexBackGroundColor, value); } } } 

Ahora mi problema es cuando bash ejecutar Add-Migration , arroja

 System.InvalidOperationException: The entity type 'Ejercicios' requires a primary key to be defined. 

¿Cómo agregar una clave principal a un modelo EF Core para sqlite?

Edit 1: Model Generator

 public class MyContext : DbContext { public DbSet Ejercicios { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlite("Filename=MyDb.db"); } } 

¿Por qué no usas fluent api ?

 modelBuilder.Entity() .HasKey(p => new p.TipoEjercicio); 

Prueba esto, creo que tu problema ya está resuelto.

—Actualizar—

Crea tu DbContext primero:

 public class MyDbContext : DbContext { public MyDbContext() : base("name=MyConnection") { Database.SetInitializer(new MigrateDatabaseToLatestVersion("MyConnection")); } public DbSet Users { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { //here you can MAP Your Models/Entities, but i am going to show you something more interesting. so keep up. modelBuilder.Configurations.Add(new UsersMap()); } } 

Crea una carpeta de migración en la raíz de tu aplicación y Configuration clase de Configuration allí:

 internal sealed class Configuration : DbMigrationsConfiguration { public Configuration() { AutomaticMigrationsEnabled = true; AutomaticMigrationDataLossAllowed = true; ContextKey = "YourApplication.Infrastructure.Data.MyDbContext"; } protected override void Seed(YourApplication.Infrastructure.Data.MyDbContext context) { // This method will be called after migrating to the latest version. // You can use the DbSet.AddOrUpdate() helper extension method // to avoid creating duplicate seed data. Eg // // context.People.AddOrUpdate( // p => p.FullName, // new Person { FullName = "Andrew Peters" }, // new Person { FullName = "Brice Lambson" }, // new Person { FullName = "Rowan Miller" } // ); // } } 

Soy un Germen Freak, así que escribo mis códigos muy limpios. Es por eso que cuando, por ejemplo, hice un Model como el siguiente, creo un EntityBase para cada Id :

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

Y lo aplico a mi Model :

 public class User: EntityBase { public string Example1{ get; set; } public string Example2{ get; set; } public string Example3{ get; set; } } 

Y para el mapeo creo otra clase como la de abajo y utilizo Fluent Api :

 public class UserMap : EntityTypeConfiguration { public UserMap() { ToTable("TblUser"); HasKey(x => x.Id); Property(x => x.Example1) .IsRequired(); //etc } } 

Pero si no quiere pasar por todos los problemas, puede simplemente insertar la API fluida en el DbContext's OnModelCreating su DbContext's OnModelCreating como dije al principio. Por cierto, ten en cuenta que si estás utilizando una API fluida, no deberías usar anotaciones de datos. Feliz codificacion