barker1889
barker1889

Reputation: 37

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?

Upvotes: 0

Views: 5974

Answers (1)

CoffeeCode
CoffeeCode

Reputation: 4314

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; }
    }
}

Upvotes: 4

Related Questions