Pregunta

creo que esto es una pregunta moderadamente neófito. He estado usando NHibernate / FluentNHibernate durante unos 6 meses más o menos, y creo que tengo una comprensión razonable de los conceptos básicos. Ahora estoy empujando un poco más allá de bits. Estoy seguro de que esto está documentado, pero yo he pasado varias horas ahora en Google, y no me he dado cuenta bastante.

He clase simple, lo llaman simple:

public class Simple
{ public string Name { get; set;}
  public string Desc { get; set; }
  public string Status { get; set;}
}

Estado es en realidad limitado a ser una de un pequeño conjunto de valores: "ACTIVO", "en espera", y "cerrado". En el esquema de base de datos, tengo una sencilla tabla de sólo lectura denominado RetrofitStatus:

CREATE TABLE [dbo].[RetrofitStatus](
[Status] [nvarchar](10) NOT NULL,
[SortOrder] [smallint] NOT NULL,
CONSTRAINT [PK_RetrofitStatus] PRIMARY KEY CLUSTERED 
(
    [Status] ASC
)

Y hay una restricción de claves foráneas en la mesa simple para asegurarse de que está en estado RetrofitStatus.

El objetivo de la mesa RetrofitStatus es incluir la columna de la SortOrder por lo que puedo hacer (en SQL)

SELECT * from Simple s join RetrofitStatus r on r.Status=s.Status ORDER BY r.SortOrder

y ordenar los resultados en un orden de visualización (por ejemplo, todas las entradas activas en primer lugar, a continuación, en espera ingresos, ingresos cierra entonces, ya que estoy clasificación en un orden lógico, no reconocen alfabético o cualquier otra cosa con facilidad).

Mi pregunta es, ¿cómo puedo modelar dicho objeto y la relación en FNH? Puedo añadir la propiedad SortOrder a mi simple definición y un hacer una vista que representa eso, pero ¿qué pasará cuando trato de insertar nuevos objetos simples en la tabla? Obviamente, yo no quiero tratar de insertar la propiedad SortOrder. Creo que necesito para usar el elemento NHib alguna manera, pero de nuevo, no me queda claro que de donde tiene que ir, lo que sucede en el inserto, y cómo hacerlo en Fluido?

Voy a experimentar con ensayo y error, pero pensé que tal vez alguien que sabe lo que están haciendo (que yo no) me puede apuntar en la dirección correcta y me ahorra mucho tiempo. Gracias por su ayuda.

¿Fue útil?

Solución

Suponiendo que había modificado una clase Simple de la siguiente manera (no estaba segura de lo que estaba haciendo acerca de una tecla):

public class Simple
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Desc { get; set; }
    public string Status { get; set; 
    public int SortOrder { get; set; }
}

se podría asignar la siguiente manera:

public SimpleMap : ClassMap<Simple>
{
    Id(x => x.Id).Unique().GeneratedBy.Native();
    Map(x => x.Name);
    Map(x => x.Desc);
    Join("RetrofitStatus", join =>
    {
        join.KeyColumn("Status") 
            .Map(x => x.Status);
        join.Map(x => x.SortOrder).Not.Insert();
    });
}

I no han probado esto, pero esta es la esencia de la misma.

Se puede especificar que una propiedad no se puede insertar o actualizar mediante Not.Insert() o Not.Update(), respectivamente, en su asignación, o puede no ser insertado ni actualizada mediante el uso de ReadOnly().

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top