SORU
22 Kasım 2008, CUMARTESİ


Bir çok çift yönlü eşleme oluşturmak için Nasıl?akıcı Arabiriminin:

Temel soru: Nasıl bir-çok Akıcı Arabiriminin haritası? bir çift yönlü yaratırım

Ayrıntılar:

Çok çocuklu bir ana nesne var. Benim durumumda, bir alt üst olmaması için anlamsız, veritabanı, üst dış anahtar NOT NULL kısıtlaması yapmak istiyorum. Otomobil üreten Akıcı Arabiriminin eşleme benim veritabanı ediyorum.

Öyle gibi: çoğu çocuk nesneleri ile bir üst var

public class Summary
{
   public int id {get; protected set;}

   public IList<Detail> Details {get; protected set;}
}

public  class Detail
{
   public int id {get; protected set;}

   public string ItemName {get; set;}

  /* public Summary Owner {get; protected set;} */ //I think this might be needed for bidirectional mapping?
}

Burada ı ile başlayan eşleme:

public class SummaryMap : ClassMap<Summary>
{
    public SummaryMap()
    {
        Id(x => x.ID);

        HasMany<Detail>(x => x.Details);
    }
}

public class DetailMap : ClassMap<Detail>
{
    public DetailMap()
    {
        Id(x => x.ID);

        Map(x => x.ItemName).CanNotBeNull();
    }
}

Detay tabloda, Summary_id Boş Değil, çünkü benim olmalı bir Ayrıntı var, anlamsız bu durumda bağlı nesne değil Özet nesne. Ancak, sadece HasMany kullanarak() göster Summary_id yabancı anahtar null bırakır.

Bu Arabiriminin içinde docs (http://www.hibernate.org/hib_docs/nhibernate/html/collections.html) buldum "Eğer ebeveyn gerekli İse, bir çift yönlü kullanım bir-çok dernek".

Nasıl Akıcı Arabiriminin harita tek yönlü oluşturabilirim?

CEVAP
22 Kasım 2008, CUMARTESİ


Boş olmayan Ayrıntılar tabloda yabancı anahtar sütun önerdi Sahibi özelliği ekleyebilirsiniz, Başvuruları ile çift yönlü bir ilişki olsun(...).() CanNotBeNull DetailsMap sınıf eşleme ve Özet ters. son ver

İki dernek yön için iki farklı yabancı anahtar sütunları önlemek için, sütun adlarını belirtmek manuel olarak veya her iki yönde de aynı sütun adını veren bir şekilde özelliklerini de adlandırabilirsiniz. Bu durumda size önerim Detayları yeniden adlandırma.Ayrıntılar için emlak sahibi.Özet.

Özet kimlik artış tarafından üretilen Özet currenty beri tabloya ekleme kimliği dışında hiçbir sütun varsa sorunları önlemek için yaptım.

Etki alanı:

public class Detail
{
    public int id { get; protected set; }
    public string ItemName { get; set; }

    // Renamed to use same column name as specified in the mapping of Summary.Details
    public Summary Summary {get; set;} 
}

public class Summary
{
    public Summary()
    {
        Details = new List<Detail>();
    }

    public int id { get; protected set; }
    public IList<Detail> Details { get; protected set; }
}

Eşleme:

public class DetailMap : ClassMap<Detail>
{
    public DetailMap()
    {
        Id(x => x.id)
            .GeneratedBy.Native();

        Map(x => x.ItemName)
            .CanNotBeNull();

        References<Summary>(x => x.Summary)
            // If you don't want to rename the property in Summary,
            // you can do this instead:
            // .TheColumnNameIs("Summary_id")
            .CanNotBeNull();
    }
}

public class SummaryMap : ClassMap<Summary>
{
    public SummaryMap()
    {
        Id(x => x.id)
            .GeneratedBy.Increment();

        HasMany<Detail>(x => x.Details)
            .IsInverse()
            .AsBag(); // Use bag instead of list to avoid index updating issues
    }
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Keith Anthe

    Keith Anthe

    26 NİSAN 2011
  • The Brister

    The Brister

    10 ŞUBAT 2008
  • TimMinchinLive

    TimMinchinLi

    23 ŞUBAT 2009