2009-09-01 6 views
2

Dans la recherche de nouveaux SimpleRepository du subsonique, j'ai trouvé que l'appel de la méthode de mise à jour () jette toujours un NullReferenceException. Cela est même vrai dans l'exemple de téléchargement MVC inclus avec la version 3.0.0.3.SubSonic SimpleRepository Mises à jour Parce Null Exceptions de référence

Est-ce que quelqu'un sait s'il existe un moyen de réussir les mises à jour?

Voici un exemple. L'instruction if fonctionne; il ajoute la table et crée l'enregistrement. Exécutez ce code une deuxième fois vers le bloc else et la mise à jour lève l'exception.

var repo = new SimpleRepository("c", SimpleRepositoryOptions.RunMigrations); 

var user = repo.Single<User>(u => u.Email == "[email protected]"); 

if (user == null) 
{ 
    repo.Add(new User { Email = "[email protected]", Name = "Test" }); 
} 
else 
{ 
    user.Name = DateTime.Now.ToString(); 
    repo.Update(user); 
} 

public class User 
{ 
    public int Key { get; set; } 
    public string Name { get; set; } 
    public string Email { get; set; } 
} 

Répondre

3

Je pense avoir trouvé le problème. Dans la source SubSonic, il existe une faille mineure dans la routine Update où elle interroge la liste des tables de l'objet de requête de mise à jour pour un nom de colonne. La requête Linq doit utiliser la propriété QualifiedName de la colonne, pas la propriété Name. Les paramètres de requête (qui est le côté droit de la requête) utilise le nom qualifié complet.

Je pris la liberté de soumettre une question sur le site GitHub de SubSonic ainsi :)

Pour les intéressés, la question est en Update.cs (dans le dossier de requête), ligne 229.

changement ce ...

var col= table.Columns.SingleOrDefault(
    x => x.Name.Equals(s.ColumnName, StringComparison.InvariantCultureIgnoreCase) 
); 

à cette ...

var col = table.Columns.SingleOrDefault(
    x => x.QualifiedName.Equals(
    s.ColumnName, StringComparison.InvariantCultureIgnoreCase 
) 
); 

Reconstruire et vous êtes bon à faire.

0

J'ai également rencontré ce problème et j'ai pu télécharger la dernière source SubSonic et le problème était déjà résolu. Ouvrez simplement le projet SubSonic.Core et créez et remplacez la référence de votre projet à SubSonic.Core.

Télécharger la dernière source http://github.com/subsonic/SubSonic-3.0

Boom - Mise à jour du référentiel fonctionne à nouveau!

Questions connexes