Is there a better way of defining generic entity classes?
There is no way to simplify generic parameters if you want to keep Entity class generic, as  noted by @svick. 

The only thing I can suggest as alternative here is to remove generic parameter from Entity. I don't think you need 10 different types for Id field, most likely you'll have int Id or Guid Id, so you can create

public interface IEntity&lt;T&gt;
{
    T Id { get; set; }
}

public abstract class IntEntity: IEntity&lt;int&gt;
{
    public virtual int Id { get; set; }
}

public abstract class GuidEntity: IEntity&lt;Guid&gt;
{
    public virtual Guid Id { get; set; }
}


Not sure if you need IEntity&lt;T&gt; interface, added it so that you don't loose the possibility to reference both types of entities in generic manner.

Yes, you'll have to declare separate IntEntityRepository and GuidEntityRepository, but I don't think it's that hard given that you can extract common code to base class, and it's a one-time job.

As to mappings - I don't use class hierarchy for them (declaring all the fields on the actual entity mapper), but you can do the same trick as with repositories.