isessionfactory fluently example c# nhibernate fluent-nhibernate has-many

fluently - nhibernate download c#



Cómo crear NHibernate HasManyToMany relación (1)

En este caso, la respuesta es bastante simple. No use muchos a muchos. Use el objeto de emparejamiento. Exactamente por las razones que ha mencionado: Extienda el objeto de vinculación con más propiedades:

Consulte aquí 24. Mejores prácticas , una cita:

No use mapeos de asociaciones exóticas.

Los buenos usos para asociaciones reales de muchos a muchos son raros. La mayoría de las veces necesita información adicional almacenada en la "tabla de enlaces". En este caso, es mucho mejor usar dos asociaciones de uno a muchos para una clase de enlace intermedio. De hecho, creemos que la mayoría de las asociaciones son uno a muchos y muchos a uno, debe tener cuidado al usar cualquier otro estilo de asociación y preguntarse si es realmente necesario.

En otras palabras, cree las relaciones de one-to-many hagan referencia a los objetos de emparejamiento desde los extremos de boht, y many-to-one desde el objeto de emparejamiento.

También verifique esto:

  • Hibernate: tabla de relaciones de muchos a muchos como entidad
  • Lista de mapeo bidireccional de muchos a muchos NHibernate / bolsa
  • Nhibernate: ¿Cómo representar las relaciones de muchos a muchos con relaciones de uno a muchos?

Un ejemplo de Dirección y Compañía. Primer objeto de emparejamiento

public class AddressCompany { // the relation to both sides public virtual Address Address { get; set; } public virtual Company Company { get; set; } // many other settings we need public virtual string Description { get; set; } public virtual DateTime CreationDate { get; set; } ... }

la dirección y la empresa en una cáscara de nuez:

public class Address { public virtual IList<AddressCompany> Companies { get; set; } ... } public class Company { public virtual IList<AddressCompany> Addresses { get; set; } ... }

El mapeo es el esperado:

public AddressMap() { HasMany(x => x.Companies) ... } public CompanyMap() { HasMany(x => x.Addresses) ... } public AddressCompanyMap() { References(x => x.Address).. References(x => x.Company).. ... }

Entonces, esto representa el objeto de emparejamiento

Bueno, pero ahora podemos encontrar algunas empresas creadas después de una fecha:

var subquery = QueryOver.Of<AddressCompany>() .Where(c => c.CreationDate > new DateTime(2000, 1, 1)) .Select(c => c.Company.ID); var query = session.QueryOver<Company>() .WithSubquery .WhereProperty(c => c.ID) .In(subquery) ...;

De esta manera, también podemos filtrar Company sobre la Dirección ...

Sé que hay preguntas sobre HasManyToMany, pero esta vez quiero poner dos campos en la tabla central como ''Descripción, CreationDate''.

Para mi situación, no quiero unir dos vías. Tengo compañía, persona y tablas de direcciones. Y cada compañía o persona puede tener más de 1 dirección. En esta situación, ¿qué debería hacer? ¿Cómo debería escribir el código de clases y mapeos?

A continuación puede ver las tablas: