Personalização de mensagens de exceção de contrato de código

Eu tenho um contrato de código expressa como isso - ele valida que a entidade a ser armazenada não é nula e é válida para a persistência. Funciona. Fab.

[ContractClassFor(typeof(IRepository<,>))]
internal abstract class ContractsForIRepository<T, TId> : IRepository<T, TId> where T : IEntity
{
    private ContractsForIRepository()
    {

    } 

    public T Persist(T entity)
    {
        Contract.Requires<InvalidEntityException>(entity != null, "Entity is null");
        Contract.Requires<InvalidEntityException>(entity.IsValidForPersistence(), "Entity not valid for persistence");
        return default(T);
    }

}

No entanto, gostaria que a exceção fosse mais útil - como qualquer pessoa que recebe a mensagem vai querer saber qual entidade é inválida e qual é a aparência dela. Todas as entidades substituem ToString (), então eu queria incluir isso na mensagem de erro:

Contract.Requires<InvalidEntityException>(entity.IsValidForPersistence(), "Entity not valid for persistence " + entity.ToString());

Eu incluí o ToString para ser explícito - ele seria chamado implicitamente se eu o omitisse, mas acho que isso torna minha pergunta mais clara.

O problema é que isso não é permitido por contratos de código e recebo a seguinte mensagem.

A mensagem do usuário para chamada de contrato pode ser apenas literal de string, ou um campo estático ou propriedade estática que é pelo menos visível internamente.

Existe alguma maneira de incluir dados específicos na mensagem de exceção?

questionAnswers(1)

yourAnswerToTheQuestion