2012-05-02 20 views
12

Obtuve una asignación que mapea el campo de objeto IPAddress en la base de datos.¿Generar tabla para mapear IPAddress como tipo INET en PostgreSQL?

Hay inet escribe en PostgreSQL adecuado para esto, pero en mi caso usa bytea escribe en su lugar cuando genera el esquema.

¿Hay alguna forma de forzar que el tipo de esquema generado para esta columna sea inet en DB?

También sucede que tiene este requisito en el identificador compuesto (whicg se requiere)

CompositeId() 
.KeyProperty(x => x.Date, "for_date") 
.KeyProperty(x => x.Address, var => var.ColumnName("ipaddress")); 

realmente no puedes usar CustomSqlType por parte clave de propiedad.

También he intentado usar

public class IPAddressPropertyConvention : IPropertyConvention 
{ 
    public void Apply(IPropertyInstance instance) 
    { 
     if (instance.Property.PropertyType == typeof(IPAddress)) 
      instance.CustomSqlType("inet"); 
    } 
} 

pero me da una excepción sobre la convención de propiedad no válido

+0

Vamos a ver si entiendo la pregunta. Desea generar un esquema de base de datos usando 'nhibernate', y cuando intenta escribir el código para hacer eso en' fluent', genera una columna de tipo 'bytea'. Prefieres generar una columna de tipo 'inet'. ¿Está bien? –

+0

@Catcall sí, precisamente esto. –

Respuesta

4
Map(x => x.IPAddress) 
    .CustomSqlType("inet") 
    .CustomType<IPAddressToInetUserType>(); // maybe needed, you should check 
+0

¿Es una solución funcional o supuestamente funcional? Porque no funciona para mí, creo. –

+0

este es el camino a seguir cuando se mapean tipos personalizados. está funcionando para muchos otros tipos, por lo tanto, probablemente también funcione aquí. ** nota: dado que es una propiedad clave que necesita IIdConvention ** – Firo

+0

hay un caso similar para hibernar https://forum.hibernate.org/viewtopic.php?f=1&t=984186 – Firo

Cuestiones relacionadas