2010-02-12 9 views
10

Duplicar posible:
Use Component as IDictionary index in AsMap in Fluent NhibernateCómo direccionar IDictionary <string, Entidad> Fluido en NHibernate

Hola,

que tienen una clase con un IDictionary en él.

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

como se puede ver que utiliza una relación muchos-a-muchos para obtener los CodedExamples desde su mesa utilizando la tabla tOwnedCodedExample para encontrar cuales son propiedad de la OwnerClass.

Me doy cuenta de que este es un mapeo muy básico (y con suerte estándar), pero estoy luchando y no puedo encontrar ninguna documentación para él, por lo tanto estaría muy agradecido de cualquier ayuda posible.

Muchas Gracias

Stu

+3

No es un duplicado. Las preguntas son diferentes –

+2

Gracias Paul, las preguntas son muy diferentes. Mi otra pregunta es acerca de una clave compuesta para el índice del diccionario; esto, espero, es una pregunta mucho más simple sobre el uso estándar de los diccionarios en FluentNH. Paul, ¿sabes cómo mapear esto? ¡He visto muchas publicaciones que dicen que es posible, pero ninguna que muestre cómo! – Stu

Respuesta

13

Tengo un ejemplo de trabajo, esto debería dejar claro a usted.

Clases:

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

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

Y luego el mapa:

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

resultante 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> 

SQL generado:

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

Eso se ve muy bien, gracias. Lo intentaré mañana cuando entre en la oficina y te responda. – Stu

+0

Gracias Paul, funcionó perfectamente. Lamentablemente, esta pregunta se ha cerrado como un duplicado, pero es de esperar que siga apareciendo en los resultados de búsqueda para que otros puedan usarla como ejemplo. Cheers Stu – Stu

2

Establezca el book.name como la clave en lugar del apodo.

Cuestiones relacionadas