data-annotationsrazor-pagesasp.net-core-3.1ef-core-3.1asp.net-core-scaffolding

Key data annotation not working when assigned to a separate partial class in my razor web app using efcore .netcore


I am developing an application in razor web apps (asp.netcore) and scaffolding db tables using efcore.

I performed a db-scaffold on my OnlineForms data table, which created my OnlineForms.cs Class. When i directly put the [key] attribute on top of the formid property in this class, I can save to the data table without any issues.

But when I move the [key] data annotation into the partial class OnlineFormsValidation, which references OnlineForms, through the [ModelMetadataType] attribute, and I try to save data; I get the error: "The entity type 'OnlineForm' requires a primary key to be defined."

The Required annotations work properly from inside OnlineFormsValidation class, but the [Key] annotation does not.

Thank you in advance. Any help would be greatly appreciated.

OnlineForm.cs:

namespace VehicleTakeHomeApp.Data.Models
{
   public partial class OnlineForm {
       [Key] <== works if i put it here, but I want to move it to OnlineFormValidation.cs
       public int FormId { get; set; }
       public string EmployeeId { get; set; }
       public string Name { get; set; }
   }
}

OnlineFormValidation.cs:

using Microsoft.AspNetCore.Mvc;
using System.ComponentModel.DataAnnotations;

namespace VehicleTakeHomeApp.Data.Models
{

    [ModelMetadataType(typeof(OnlineFormValidation))]
    public partial class OnlineForm
    {
    }

    public class OnlineFormValidation
    {
        [Key]  <== this annotation is not getting picked up, even though the Required annotations below it get picked up.
        public int FormId { get; set; }

        [Required(ErrorMessage = "Employee ID is required.")]
        public string EmployeeId { get; set; }

        [Required(ErrorMessage = "Name is required.")]
        public string Name { get; set; }
    }
}

Solution

  • I had the OnModelCreating method in my dbcontext class commented out. This method contains the HasKey() from the initial db-scaffold.

    I uncommented the OnModelCreating method, and now I don't need to add the [Key] annotation, to either class and it works.

    It's more of a workaround then a solution, but its works.