2012-05-02 10 views
12

Ho ottenuto una mappatura che mappa il campo oggetto IPAddress nel database.Genera tabella per mappare IPAddress come tipo INET in PostgreSQL?

C'è il tipo inet in PostgreSQL adatto per questo, ma nel mio caso utilizza il tipo bytea invece quando genera schema.

C'è un modo per forzare il tipo di schema generato risultante per questa colonna in inet effettivamente nel DB?

ho anche capita di avere questo requisito su ID composito (whicg richiesto)

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

Non potete davvero usare CustomSqlType da parte proprietà chiave.

Ho anche provato ad utilizzare

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

ma ottengo un'eccezione circa convenzione proprietà non valida

+0

Vediamo se ho capito la domanda. Vuoi generare uno schema di database usando 'nhibernate', e quando provi a scrivere il codice per farlo in' fluente', genera una colonna di tipo 'bytea'. Preferiresti che generi una colonna di tipo 'inet'. È giusto? –

+0

@Catcall si, proprio questo. –

risposta

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

Si tratta di una soluzione di lavoro o di un presunto lavoro? Perché non funziona per me, penso. –

+0

questa è la strada da percorrere quando si mappano i tipi personalizzati. funziona per molti altri tipi, quindi probabilmente funziona anche qui. ** nota: poiché è una proprietà chiave, è necessario IIdConvention ** – Firo

+0

c'è un caso simile per hibernate https://forum.hibernate.org/viewtopic.php?f=1&t=984186 – Firo

Problemi correlati