Search code examples
c#.netentity-frameworkef-code-first-mapping

Entity Framework 6 Fluent Mapping - One to Many Code First


Given the following SQL tables:

EntityGroup:
Id int, (PK)
GroupName nvarchar(100)

Entity:
Id int, (PK)
EntityGroupId int, (FK Non-nullable)
Description nvarchar(100)

And the following POCOs

  public class Entity
  {
    public int Id { get; set; }
    public int EntityGroupId { get; set; }    
    public int RefNumber { get; set; }
  }    

  public class EntityGroup
  {
    public int Id { get; set; }    
    public virtual IList<Entity> Entities { get; set; }
  }

How do I configure the fluent mapping correctly? I want Entity.EntityGroupId to remain as an int rather than an EntityGroup object.

I want to be able to .Include() optionally Include("Entities"). The closest I got is this, but that seems to eager-load all entities even if I dont use .Include("Entities"), which is not the behaviour I want:

modelBuilder.Entity<EntityGroup>()
        .HasMany(x => x.Entities);

Solution

  • You must set off the lazy loading, you can do this for just a specific unit of work or for all by setting your dbContext Like

       dbContext.Configuration.LazyLoadingEnabled = false;
       dbContext.Configuration.ProxyCreationEnabled = false;
    

    or set it in Ctor of your DbContext.