Data - Entities and Mappings

As part of Highway.OnRamp.MVC.Data we include several classes which help you in creating Entity Framework entities and mappings. These types are not required, but they are meant to assist you.

Base Type for Entities

The first of these is our BaseEntity which we encourage you to inherit all of your entities from. This type is located in the Entities folder, and defines a singular Id property, which in this case is a Guid.

public abstract class BaseEntity : IIdentifiable<Guid>
{
    public Guid Id { get; set; }
}

What is IIdentifiable<T>?

Our sister project Highway.Data has a little known feature called PreBuilt Queries. It defines a set of queries for you, including GetById and FindAll. These queries use an interface IIdentifiable<T> to know what your Primary Key is. There is no requirement that your entities implement this interface, but if they do there are several features which are added. Note that the T defined the type of your key, and it can be changed to an int or any other type you prefer for your primary keys.

Base Type for Mappings

We also provide a base type for all of your EntityTypeConfiguration<T> classes called BaseMapping<T>. Aside from being a short name, which in and of itself is awesome, this class also maps your key and sets it to be database generated as an identity. One important note is that the T for BaseMapping<T> is restricted being a BaseEntity so we can map the Id property.

public abstract class BaseMapping<T> : EntityTypeConfiguration<T> where T : BaseEntity
{
    public BaseMapping()
    {
        this.HasKey(e => e.Id);
        this.Property(e => e.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
    }
}

Automatic Mappings Inclusion

Building on an awesome feature of Entity Framework 6.0, we automatically detect all EntityTypeConfiguration<T> classes in the MVC project. This means you don’t need to update our IMappingConfiguration every time you add a new entity.

public class HighwayMappingConfiguration : IMappingConfiguration
{
    public void ConfigureModelBuilder(DbModelBuilder modelBuilder)
    {
        modelBuilder.Configurations.AddFromAssembly(this.GetType().Assembly);
    }
}

Comments