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
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.
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