Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Value cannot be null. (Parameter 'key') in ASP.NET Core 3..0

I need to create a database with code-first in ASP.NET Core 3.0

This is the DbContext:

public class TrelloContext : DbContext
{
    public TrelloContext(DbContextOptions options) : base(options)
    {
    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
        modelBuilder.AddDbSet<IEntity>(typeof(IEntity).Assembly);
        modelBuilder.ApplyConfigurationsFromAssembly(typeof(IType).Assembly);
    }
}

and this is startup :

public void ConfigureServices(IServiceCollection services)
{
        services.AddControllers().AddControllersAsServices();
        services.AddDbContext<TrelloContext>(options => options.UseSqlServer(Configuration.GetConnectionString("SqlServer")));
        services.Injection();
}

This is my connection string :

"ConnectionStrings": {
    "SqlServer": "Data Source=.;Initial Catalog=TrelloDB;Trusted_Connection=True;Trusted_Connection=True;"
}

When I use this add-migration initial, I get this error:

Value cannot be null. (Parameter 'key')

What's the problem? How can I solve this?

like image 722
mr-dortaj Avatar asked Apr 17 '26 07:04

mr-dortaj


2 Answers

It was because of one of your entities (inherited from interface: IEntity) do not have an identity column.

Please check all your entites. Make sure they all have an ID or a property marked as [Key].

public class MyEntity : IEntity
{
    // make sure:
    public int Id { get; set; }
    // or:
    [Key]
    public int SomeProperty { get; set; }
}
like image 144
Anduin Avatar answered Apr 19 '26 19:04

Anduin


for registration only, this also occurs in the DDD when a UniqueKey is created from an existing table, and duplicate records already exist between UniqueKey fields.

Example:

//SQL: [dbo].[User]:
Id | Name | Login
1  | Thi  | thi.xpto
2  | Thi  | thi.xpto


[Table("User")]
public class User
{
  [Key]
  public int Id { get; set; }
  public string Name { get; set; }
  public string Login { get; set; }
}

public class UserDbContext : DbContext
{
  ...
  protected override void OnModelCreating(ModelBuilder modelBuilder)
  {
    modelBuilder.Entity<User>()
      .HasAlternateKey(x => new { x.Name, x.Login })
      .HasName("UK_User_NameLogin");
  }
}
like image 43
Thiago Godinho Paschoalin Avatar answered Apr 19 '26 21:04

Thiago Godinho Paschoalin



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!