2009-07-19 7 views
3

Comment pouvez-vous créer une relation un à un dans Subsonic? Par exemple, j'ai ma table appelée lectures et chaque lecture a un seul livre, cependant Subsonic renvoie un IQueryable de livres. Je veux qu'il ne retourne qu'un seul livre. Merci.Relations un à un avec Subsonic

Répondre

1

Je suppose que vous utilisez le modèle ActiveRecord pour générer votre code.

intérieur ActiveRecord.tt, vous verrez une section qui ressemble à ceci:

public IQueryable<<#=fk.OtherClass #>> <#=propName #> 
     { 
      get 
      { 
        var repo=<#=Namespace #>.<#=fk.OtherClass#>.GetRepo(); 
        return from items in repo.GetAll() 
         where items.<#=CleanUp(fk.OtherColumn)#> == _<#=CleanUp(fk.ThisColumn)#> 
         select items; 
      } 
     } 

Ceci est le modèle pour le code qui est généré pour chaque clé étrangère sur votre table. Vous devrez modifier cette section et peut-être mettre de la logique autour de ce code et générer quelque chose de différent pour vos clés one-to-one.

Espérons que cela vous dirige dans la bonne direction.

1

Ce que je faisais était de créer une classe partielle comme ceci:

public partial class Reading 
{ 
    private Book _book; 
    public Book Book 
    { 
     get 
     { 
      if (_book == null) 
       _book = this.Books.SingleOrDefault(); 
      { 
       return _book; 
      } 
     } 
     set 
     { 
      _book = value; 
     } 
    } 
} 

Vous pouvez alors accéder au carnet d'objet enfant de lecture directement, plutôt que par l'objet IQueryable.

Si quelqu'un connaît une meilleure façon de le faire, s'il vous plaît laissez-moi savoir que c'est tout ce que je pouvais trouver après beaucoup de difficultés.

Edit: Vous avez oublié de mentionner que cette classe partielle doit être dans le même espace que les modèles subsoniques générés

Questions connexes