Search code examples
entity-frameworkpocomapping-model

How to map parent column in EF 4.1 code first


In my project I have following DomainModel.

public class Login
{
    public Guid Id { get; set; }
    public Login CreatedBy {get; set; }
}

I am using fluent configuration as below:

modelBuilder.Entity<Login>()
            .HasKey(x => x.Id)
            .ToTable("Login");

modelBuilder.Entity<Login>()
            .HasOptional(x => x.CreatedBy)
            .WithMany()
            .HasForeignKey(x => x.CreatedBy);

My code in repository to get all Logins data is as below:

return from d in Db.Logins.Include("CreatedBy") 
       select d;

When I execute the code I am getting following error:

The foreign key component 'CreatedBy' is not a declared property on type 'Login'. Verify that it has not been explicitly excluded from the model and that it is a valid primitive property.

Can anyone suggest what I am doing wrong here?

Thanks in advance


Solution

  • .. has not been explicitly excluded from the model and that it is a valid primitive property

    Your foreign key mapping .HasForeignKey(x => x.CreatedBy) does not use a primitive property.

    public class Login
    {
        public Guid Id { get; set; }
        public virtual Login CreatedBy {get; set; }
    }
    

    Then map it like

    modelBuilder.Entity<Login>()
                .HasKey(x => x.Id)
                .ToTable("Login");
    
    modelBuilder.Entity<Login>()
                .HasOptional(x => x.CreatedBy)
                .WithMany()
                .Map(x => x.MapKey("ForeignKeyColumn"));