Pergunta

Eu acho que essa é uma pergunta moderada de neófitos. Eu uso o Nibernate/Fluentnhibernate há cerca de 6 meses ou mais e acho que tenho uma compreensão justa do básico. Agora estou empurrando um pouco além. Tenho certeza de que isso está documentado, mas já passei várias horas no Google e não descobri bastante.

Eu tenho aula simples, chame de simples:

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

O status é realmente restrito a ser um de um pequeno conjunto de valores: "ativo", "hold" e "fechado". No esquema do banco de dados, tenho uma tabela simples somente leitura chamada ROTOFITSTATUS:

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

E há uma restrição de chave estrangeira na tabela simples para garantir que o status esteja no retrofitstatus.

O objetivo da tabela de retrofitstatus é incluir a coluna Sortorder para que eu possa fazer (no SQL)

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

e classifique meus resultados em uma ordem de exibição (por exemplo, todas as entradas ativas primeiro, depois as entradas em seguida e depois as entradas fechadas, já que estou classificando uma ordem lógica, não alfabética ou qualquer outra coisa reconhece facilmente).

Minha pergunta é: como faço para modelar esse objeto e relacionamento no FNH? Posso adicionar a propriedade Sortorder à minha definição simples e fazer uma visão que represente isso, mas o que acontecerá quando eu tentar inserir novos objetos simples na tabela? Obviamente, não quero tentar inserir a propriedade Sortorder. Eu acho que preciso usar o elemento Nhib de alguma forma, mas, novamente, não estou claro para onde isso precisa ir, o que acontece na inserção e como fazê -lo em fluente?

Vou tentar experimentar a tentativa e o erro, mas pensei que talvez alguém que saiba o que está fazendo (o que não sei) possa me apontar na direção certa e me economizar algum tempo. Obrigado pela ajuda.

Foi útil?

Solução

Supondo que você tenha um Simple Classe modificada da seguinte forma (eu não tinha certeza do que você estava fazendo com uma chave):

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; }
}

Você pode mapear assim:

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();
    });
}

Eu não testei isso, mas essa é a essência disso.

Você pode especificar que uma propriedade não pode ser inserida ou atualizada usando Not.Insert() ou Not.Update(), respectivamente no seu mapeamento, ou não pode ser inserido nem atualizado usando ReadOnly().

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top