2012-05-02 11 views
12

Veritabanına IPAddress nesne alanını eşleyen bir eşleme aldım.PostgreSQL'de IPAddress'in INET türü olarak eşlenmesi için tablo oluşturulsun mu?

PostgreSQL'te bunun için uygun olan inet türü var, ancak benim durumumda şema oluşturduğunda bunun yerine bytea türünü kullanıyor.

Bu sütunda oluşturulan oluşturulmuş şema türünün aslında DB'de inet olmasını zorlamanın bir yolu var mı?

Ben de sen gerçekten cant anahtar özellik kısmında CustomSqlType kullanmak (gereklidir whicg) kompozit kimliği bu gereksinimi

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

sahip olur.

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

kullanarak çalıştı Ama

+0

ben soruyu anlamadım Bakalım geçersiz özellik kongre hakkında istisna olsun. 'Nhibernate' kullanarak bir veritabanı şeması oluşturmak istiyorsunuz ve 'akıcı' yapmak için kod yazmayı denediğinizde, 'bytea' türünde bir sütun oluşturur. Bunu "inet" türünde bir sütun oluşturmayı tercih edersiniz. Bu doğru mu? –

+0

@Catcall evet, kesinlikle bu. –

cevap

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

Bu bir çalışma çözümü mi, yoksa sözde mi çalışıyor? Çünkü benim için çalışmaz diye düşünüyorum. –

+0

Bu, özel türlerin eşleştirilmesi sırasında yoludur. Birçok başka tür için çalışıyor, dolayısıyla muhtemelen burada da çalışıyor. ** not: bu önemli bir özellik olduğundan IIdConvention ** – Firo

+0

ihtiyaç duyacağınız benzer bir durum vardır. https://forum.hibernate.org/viewtopic.php?f=1&t=984186 – Firo

İlgili konular