Creating Primary Key field on MVC class

60,990

Solution 1

Description

Entity Framework CodeFirst recognize the key, by default, by name. Valid names are Id or <YourClassName>Id.

Your property should named Id or AccountTypesId

Another way is to use the ModelBuilder to specify the key.

Sample

public class MyDbContext : DbContext
{
    public DbSet<AccountTypes> AccountTypes { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<AccountTypes>.HasKey(x => x.AccountTypeID);
        base.OnModelCreating(modelBuilder);
    }
}

Mode Information

Solution 2

Try using [EdmScalarPropertyAttribute(EntityKeyProperty=true, IsNullable=false)] property to indicate the key field.

The regular field would go with EntityKeyPropert=false.

Share:
60,990
Peter
Author by

Peter

A freelance developer with C#.net, php, js, sql server, mysql, .net, Laravel, K2 and SharePoint.

Updated on December 14, 2020

Comments

  • Peter
    Peter over 3 years

    I am new to MVC and C#. I just stumbled on it and found it interesting. I encountered an issue which will not allow me proceed. Here is my code:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc; 
    
    namespace MyHotel.Models
    {
        public class AccountTypes
        {
            public int AccountTypeID { get; set; }
            public string AccountTypeName { get; set; }
        }
    }
    

    I created the controler and the view thereafter.

    And for this, I keep got this error:

    One or more validation errors were detected during model generation:

    System.Data.Edm.EdmEntityType: : EntityType 'AccountTypes' has no key defined. Define the key for this EntityType.
    System.Data.Edm.EdmEntitySet: EntityType: EntitySet "AccountTypes" is based on type "AccountTypes" that has no keys defined.
    

    I google that the answers were to add [Key] over the public int AccountTypeID { get; set; } so it could look like this:

    namespace MyHotel.Models
    {
        public class AccountTypes
        {
            [Key]
            public int AccountTypeID { get; set; }
            public string AccountTypeName { get; set; }
        }
    }
    

    But no result until now. Note: I am using MVC 4