2010-02-12 13 views
0

Tout d'abord, je tiens à m'excuser pour mon anglais, pas mon côté le plus fort.Interfaces SubSonic, SimpleRepository et entité

À la question. Dans mon projet actuel, j'ai des interfaces avec mes entités afin que je puisse utiliser les attributs Subsonic à mes entites principales et je veux être en mesure de changer de manière transparente le mappeur O/R à l'avenir. De toute façon, j'obtiens une erreur lorsque j'essaie d'utiliser mes interfaces et classes SimpleRepositorys comme Single <>, All <> et ainsi de suite. Je sais pourquoi je reçois le message d'erreur mais j'ai besoin d'aide pour trouver un moyen de contourner le problème. Message d'erreur:

System.InvalidCastException: Impossible de jeter l'objet de type 'SubSonic.DomainObjects.User' taper 'Core.DomainObjects.IUser'.

code:
public IUser FindById(int id) {
var user = _repository.Single<User>(x => x.Id == id);
return (IUser)user;
}

Comme vous pouvez le voir, je l'ai essayé de rendre l'utilisateur à l'ordre IUser travailler quand je veux ajouter des données, mais sans succès. Que puis-je faire pour que cela fonctionne?

Merci,
Timmie

Répondre

0

Je ne pense pas subsonique est le problème dans cette situation. Ce code fonctionnera:

namespace Core.Objects 
{ 
    public interface ICustomer 
    { 
     int CustomerID { get; set; } 
     string Name { get; set; } 
    } 

} 
code

pour la classe réelle:

namespace Business.Entities 
{ 
     public class Customer: Core.Objects.ICustomer 
     { 
      public int CustomerID { get; set; } 

      [SubSonicStringLength(50)] 
      public string Name { get; set; } 
     } 
} 

Et enfin, la fonction pour obtenir le client:

private static ICustomer CustomerByID(int id) 
{ 
     var repos = new SimpleRepository("Test", SimpleRepositoryOptions.None); 
     var customer = repos.Single<Customer>(c => c.CustomerID == id); 

     return (ICustomer) customer; 
} 
+0

Annoying, a oublié d'inclure l'interface. –