Question

Je pense que cela est une question modérément néophyte. J'utilise NHibernate / FluentNHibernate pendant environ 6 mois environ, et je pense avoir une bonne compréhension juste des bases. Maintenant, je pousse un peu au-delà. Je suis sûr que cela est documenté, mais je l'ai passé plusieurs heures maintenant sur Google, et n'ont pas tout à fait compris.

Je classe simple, appelez simple:

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

État est en fait contraint d'être l'un d'un petit ensemble de valeurs: « ACTIVE », « en attente » et « FERME ». Dans le schéma DB, j'ai une simple table de lecture seule appelée RetrofitStatus:

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

Et il y a une contrainte de clé étrangère sur la table simple pour vous assurer que l'état est RetrofitStatus.

Le but de la table RetrofitStatus est d'inclure la colonne SortOrder afin que je puisse faire (dans SQL)

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

et trier mes résultats dans un ordre d'affichage (par exemple, toutes les entrées ACTIVE, puis les entrées en attente, puis les entrées FERMÉ, depuis que je suis le tri sur un ordre logique, non alphabétique ou quoi que ce soit reconnaissent autre facilement).

Ma question est, comment puis-je modélise cet objet et relation FNH? Je peux ajouter la propriété SortOrder à ma définition simple et faire une vue qui représente, mais ce qui va se passer lorsque je tente d'insérer de nouveaux objets simples dans la table? De toute évidence, je ne veux pas essayer d'insérer la propriété SortOrder. Je pense que je dois utiliser l'élément NHib en quelque sorte, mais encore une fois, je ne suis pas clair sur l'endroit où cela doit aller, ce qui se passe à l'insertion, et comment le faire parler couramment?

Je vais essayer d'expérimenter avec essais et erreurs, mais je pensais que peut-être quelqu'un qui sait ce qu'ils font (que je ne le fais pas) peut me diriger dans la bonne direction et me faire gagner du temps. Merci pour votre aide.

Était-ce utile?

La solution

En supposant que vous aviez une classe Simple modifié comme suit (je ne savais pas ce que vous faisiez sur une clé):

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

vous pouvez mapper comme ceci:

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

Je ne l'ai pas testé, mais c'est l'essentiel.

Vous pouvez spécifier qu'une propriété ne peut pas être inséré ou mis à jour à l'aide Not.Insert() ou Not.Update(), respectivement dans votre correspondance, ou ne peut être ni inséré ni mis à jour en utilisant ReadOnly().

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top