views:

141

answers:

0

Hi There is o possibility to create a convention for Column naming:

I have this peace of code:

public AutoPersistenceModel Generate() { var result = AutoPersistenceModel.MapEntitiesFromAssemblyOf() .Where(GetAutoMappingFilter) .WithConvention(GetConventions);

        return result;
    }

private bool GetAutoMappingFilter(Type t) { return t.GetInterfaces().Any( x => x.IsGenericType && (x.GetGenericTypeDefinition() == typeof(IEntityWithTypedId<>))); }

    private static void GetConventions(Conventions conventions)
    {
        conventions.GetPrimaryKeyNameFromType = type => type.Name.ToLower() + "_id";
        conventions.FindIdentity = type => type.Name.ToLower() == "id";
        conventions.GetTableName = type =>
                                       {
                                           if (!type.Name.Contains("Lookup"))
                                           {
                                               return Inflector.Net.Inflector.Pluralize(type.Name).ToLower();
                                           }
                                           return
                                               Inflector.Net.Inflector.Underscore(type.Name)
                                                   .Replace("lookup", "lu").ToLower();
                                       };
        conventions.IsBaseType = DontMapAsJoinedSubclassTypesInheritedFrom;
        conventions.GetForeignKeyNameOfParent = type => Inflector.Net.Inflector.Underscore(type.Name) + "_id";
        conventions.GetForeignKeyName = type => Inflector.Net.Inflector.Underscore(type.Name) + "_id";
        conventions.OneToManyConvention = m => m.Cascade.All();

    }


    private static bool DontMapAsJoinedSubclassTypesInheritedFrom(Type arg)
    {
        var derivesFromEntity = arg == typeof(Entity);
        var derivesFromEntityWithTypedId = arg.IsGenericType &&
                                           (arg.GetGenericTypeDefinition() == typeof(EntityWithTypedId<>));
        return derivesFromEntity || derivesFromEntityWithTypedId;
    }

and a Entity class

public class Organisation : EntityWithTypedId<int>
    {
        public virtual Organisation Parent { get; set; }
        public virtual LookOrganisationType OrganisationType { get; set; }
        [DomainSignature]
        public virtual string OrganisationName { get; set; }
        public virtual string Address1 { get; set; }
        public virtual string Address2 { get; set; }
        public virtual string City { get; set; }
        public virtual string Postcode { get; set; }
        public virtual LookupCountry Country { get; set; }
        public virtual string TelNo { get; set; }
        public virtual string FaxNo { get; set; }
        public virtual string Email { get; set; }
        public virtual User Contact { get; set; }
        public virtual DateTime? DateCreated { get; set; }
        public virtual DateTime? DateAmended { get; set; }
        public virtual bool Active { get; set; }
    }

Finally I want to have a column for, let's say TelNo like tel_no. So the Convention is if Property contains capital letter in the middle ti should be underscored. Inflector.Net.Inflector.Underscore works fine. But I do not know how to write the convention.

Somethig like:

(conventions.GetPropertyName = type => Inflector.Net.Inflector.Underscore(type.ColumnName))

Thanks

related questions