2010-02-12 11 views
10

Powiel możliwe:
Use Component as IDictionary index in AsMap in Fluent NhibernateJak mapować IDictionary <string, Entity> w Fluent NHibernate

Cześć,

Mam klasy z krytym IDictionary na nim.

<map name="CodedExamples" table="tOwnedCodedExample"> 
    <key> 
     <column name="OwnerClassID"/> 
    </key> 
    <index type="string" column="ExampleCode"/> 
    <many-to-many class="CodedExample" column ="CodedExampleClassID"/> 
    </map> 

jak widać to wykorzystuje wiele-do-wielu, aby uzyskać CodedExamples od ich stolika, wykorzystując tabelę tOwnedCodedExample dowiedzieć się, jakie są własnością OwnerClass.

Zdaję sobie sprawę, że jest to bardzo podstawowe (i mam nadzieję, że standardowe) mapowanie, ale mam problemy i nie mogę znaleźć dla niego żadnej dokumentacji, dlatego byłbym bardzo wdzięczny za każdą możliwą pomoc.

Wiele Dzięki

Stu

+3

To nie jest duplikat. Pytania są różne. –

+2

Dzięki Paul, pytania są bardzo różne. Moje drugie pytanie dotyczy klucza złożonego dla indeksu słownikowego, co - mam nadzieję - jest znacznie prostszym pytaniem o standardowe użycie słowników w FluentNH. Paul, wiesz jak to zmapować? Widziałem wiele postów mówiących, że jest to możliwe, ale żadne nie pokazują, jak! – Stu

Odpowiedz

13

mam pracy przykład, to powinien zrobić to dla ciebie jasne.

Ćwiczenia:

public class Customer : Entity 
{   
    public IDictionary<string, Book> FavouriteBooks { get; set; } 
} 

public class Book : Entity 
{ 
    public string Name { get; set; } 
} 

A potem mapie:

HasManyToMany<Book>(x => x.FavouriteBooks) 
      .Table("FavouriteBooks")     
      .ParentKeyColumn("CustomerID") 
      .ChildKeyColumn("BookID") 
      .AsMap<string>("Nickname")     
      .Cascade.All(); 

wynikowym pliku XML:

<map cascade="all" name="FavouriteBooks" table="FavouriteBooks" mutable="true"> 
    <key> 
    <column name="`CustomerID`" /> 
    </key> 
    <index type="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> 
    <column name="`Nickname`" /> 
    </index> 
    <many-to-many class="Domain.Book, Domain, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"> 
    <column name="`BookID`" /> 
    </many-to-many> 
</map> 

Generated SQL:

create table "Customer" (
    "Id" integer, 
    "FirstName" TEXT, 
    primary key ("Id") 
) 

create table FavouriteBooks (
    "CustomerID" INTEGER not null, 
    "BookID" INTEGER not null, 
    "Nickname" TEXT not null, 
    primary key ("CustomerID", "Nickname") 
) 

create table "Book" (
    "Id" integer, 
    "Name" TEXT, 
    primary key ("Id") 
) 
+0

To wygląda świetnie dzięki. Dam to jutro, kiedy wejdę do biura i wrócę do ciebie. – Stu

+0

Dzięki Paul, to działało idealnie. Niestety to pytanie zostało zamknięte jako duplikat, ale mam nadzieję, że nadal będzie się pojawiać w wynikach wyszukiwania, aby inni mogli go użyć jako przykładu. Pozdrowienia Stu – Stu

2

Zamapuj book.name jako klucz zamiast pseudonimu.

Powiązane problemy