Unable to create a 'DbContext' of type ''. The exception 'The en

ghz 8months ago ⋅ 51 views

Unable to create a 'DbContext' of type ''. The exception 'The entity type 'Money' requires a primary key to be defined

I have 2 model classes for having price for my other models :

public class ChefFoodPrice
{
    [Key]
    public int ChefFoodPriceId { get; set; }
    public int ChefFoodId { get; set; }
    public int PriceTypeId { get; set; }
    public Money ChefFoodsPrice { get; set; }
    public Money ChefFoodPriceIsDefault { get; set; }
    public DateTime ChefFoodPriceFromDate { get; set; }
    public DateTime ChefFoodPriceToDate { get; set; }
    public DateTime RegisterDate { get; set; }
    public int CreatedUser { get; set; }

    #region Relations
    [ForeignKey("PriceTypeId")]
    public PriceType PriceType { get; set; }
    #endregion
}

And the other model class is:

public class PriceType
{
    [Key]
    public int PriceTypeId { get; set; }
    public string PriceTypeName { get; set; }
    public string PriceTypeCurrency{ get; set; }
    public int PriceTypeIsDefault { get; set; }
    public DateTime RegisterDate { get; set; }
    public int CreatedUser { get; set; }

    #region Relations
    public ICollection<ChefFoodPrice> ChefFoodPrices { get; set; }
    #endregion
}

But after add migration I see this error:

Unable to create a 'DbContext' of type ''. The exception 'The entity type 'Money' requires a primary key to be defined. If you intended to use a keyless entity type, call 'HasNoKey' in 'OnModelCreating'. For more information on keyless entity types, see https://go.microsoft.com/fwlink/?linkid=2141943.' was thrown while attempting to create an instance. For the different patterns supported at design time, see https://go.microsoft.com/fwlink/?linkid=851728

I added this code :

modelBuilder.Entity<ChefFoodPrice>().HasNoKey();

but I still get that error and can not add the migration.

I have set key for Money?

After adding .HasNoKey(), I get this error:

Unable to create a 'DbContext' of type ''. The exception 'The entity type 'Money' requires a primary key to be defined. If you intended to use a keyless entity type, call 'HasNoKey' in 'OnModelCreating'. For more information on keyless entity types, see https://go.microsoft.com/fwlink/?linkid=2141943.' was thrown while attempting to create an instance. For the different patterns supported at design time, see https://go.microsoft.com/fwlink/?linkid=851728

database shows that some of properties should be "Money" type enter image description here

Answers

It seems like you're encountering an issue with the Money type in your entity classes. The error message indicates that the Money type requires a primary key to be defined, but it seems like you haven't explicitly defined a primary key for it.

To resolve this issue, you have a few options:

  1. Define a Primary Key for the Money Type: If the Money type represents an entity in your database, you should define a primary key for it just like you do for other entity classes. If it's not meant to be an entity but rather a value type used within other entities, you should handle it differently.

  2. Handle Money as a Value Type: If Money is intended to be a value type used within other entities, you should not map it as an entity itself. Instead, consider using a primitive data type such as decimal or double to represent monetary values, or create a custom value type if necessary.

  3. Explicitly Configure Money as Keyless Entity: If Money is meant to be a keyless entity type, you need to configure it as such in your DbContext using HasNoKey() method.

Here's how you can explicitly configure Money as a keyless entity type:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Money>().HasNoKey();
}

Ensure that you remove any previous configurations related to ChefFoodPrice or PriceType entities being configured as keyless entities.

After making these changes, try adding the migration again. If you continue to encounter issues, review your entity configurations and ensure that they accurately reflect the database schema you intend to create.