Search code examples
entity-framework-4asp.net-mvc-4foreign-key-relationship

MVC 4 Entity Framework - Foreign Key to UserProfile


I've created a standard MVC 4 application using the built in account controllers/models/views. I've now tried to add another controller but I want to create a foreign key relationship to an existing user, but im getting the error message:

The ForeignKeyAttribute on property 'CreatedBy' on type 'MVC4App.Models.ListingModel' is not valid. The foreign key name 'UserId' was not found on the dependent type 'MVC4App.Models.ListingModel'. The Name value should be a comma separated list of foreign key property names.

The Listing Model Code is:

using System; using System.ComponentModel.DataAnnotations.Schema;

namespace MVC4App.Models
{
    public class ListingModel
    {
        [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
        public int Id { get; set; }

        public string Location { get; set; }

        public string Instrument { get; set; }

        public string Genres { get; set; }

        public string Description { get; set; }

        [ForeignKey("UserId")]
        public virtual UserProfile CreatedBy { get; set; } 

        public DateTime CreatedOn { get; set; }
    }
}

What am I missing here? Or is there a better way I should be doing this?

Also I'm assuming I can just add extra properties to the user profile such as an email address or a link to an avatar image later on in the project?


Solution

  • You have to add the UserId to your entity:

    namespace MVC4App.Models
    {
        public class ListingModel
        {
            [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
            public int Id { get; set; }
    
            public string Location { get; set; }
    
            public string Instrument { get; set; }
    
            public string Genres { get; set; }
    
            public string Description { get; set; }
    
            public int UserId {get; set;}
            [ForeignKey("UserId")]
            public virtual UserProfile CreatedBy { get; set; } 
    
            public DateTime CreatedOn { get; set; }
        }
    }