2010-09-16 6 views
8

J'utilise Fluent NHibernate et j'ai deux tables:Inscrivez-vous à une table avec deux colonnes non-FK avec Fluent NHibernate

BusinessPlan [Id, Year, CustomerCode] 

PreviousYearData [Id, Year, CustomerCode, MoreFieldsForData] 

Dans mon domaine, je veux rejoindre PreviousYearData au BusinessPlan pour faire des entités quelque chose comme ceci:

public class BusinessPlan { 
    public Guid Id { get; set; } 
    public int Year { get; set; } 
    public string CustomerCode { get; set; } 
    public PreviousYearData PreviousYearData {get; set;} 
} 

public class PreviousYearData { 
    public Guid Id { get; set; } 
    public int Year { get; set; } 
    public string CustomerCode { get; set; } 
    // many more fields 
} 

les données du tableau se PreviousYearData prérempli au début de l'année avant que les BusinessPlans auront été créés, donc je ne sais pas ce que sera et ne peut pas créer Id du BusinessPlan une clé étrangère normale. Ce que je pense que je veux faire est de rejoindre le PreviousYearData à BusinessPlan basé sur les deux colonnes Year et CustomerCode. Est-ce possible avec Fluent NHibernate? Y a-t-il une autre façon d'aborder cela qui a plus de sens?

Répondre

1

Je suppose que cela ou similaire devrait travailler pour vous:

 HasMany(x => x.PreviousYearDatas) 
      .Access.AsCamelCaseField(Prefix.Underscore) 
      .WithKeyColumns("YEAR", "CUSTOMER_CODE") 
      .LazyLoad(); 

Vous aurez collection, mais vous serez en mesure d'obtenir ce que vous voulez.

Aussi il y a une autre construction:

 HasMany( 
      // some mapping but includes one foreign key - say customer code 
      .Where("YEAR = 2010") 

C'est probablement le meilleur choix. Je ne pense pas que les années changent souvent :)

0

Je ne vois pas pourquoi il y a un problème d'avoir une clé étrangère dans le tableau BusinessPlan: PreviousYearDataId

dans la cartographie BusinessPlan il suffit d'ajouter:

References(x => x.PreviousYearData) 
    .Column("PreviousYearDataId") 
+0

Oui. Si la table PreviousYearData est remplie en premier, pourquoi la table BusinessPlan ne possède-t-elle pas l'ID de son enregistrement PreviousYearData correspondant? – David

Questions connexes