Si vous tentez de définir un champ binaire sur null, cela me donne une exception ArgumentNull. Je peux définir le champ pour être vide comme ceci new Binary(new byte[] {});
mais ce n'est pas nul juste une colonne vide. Existe-t-il une solution de contournement utilisant LinqToSql?Définir Linq To Sql Champ binaire sur null
Répondre
Vous avez autre chose à faire. Je viens de créer un petit exemple de table avec un id (identité), un varbinary (MAX), un varbinary (MAX) non-nullable, et un timestamp. L'utilisation du code suivant fonctionne très bien sans erreurs. Où que ce code jette (et attrape) correctement une exception SQLException, pas une exception ArgumentNullException.
try
{
using (var context = new TestDataContext())
{
var binarySample2 = new BinarySample
{
NonNullImage = null,
Image = new Binary(new byte[0])
};
context.BinarySamples.InsertOnSubmit(binarySample2);
context.SubmitChanges();
}
}
catch (SqlException e)
{
Console.WriteLine(e.Message);
}
Est-il possible que vous avez une implémentation de la classe partielle qui a un gestionnaire SendPropertyChanging pour la propriété qui jette le ArgumentNullException?
EDIT: basé sur le commentaire de l'OP.
Notez que vous ne pouvez pas affecter directement une variable de type byte [] au binaire, car elle appelle implicit conversion operation et la conversion implicite lancera une exception ArgumentNullException. Vous devriez vérifier si la valeur est null avant d'essayer de l'assigner et simplement assigner null si la variable byte [] est nulle. Pour moi, cela semble être un comportement étrange et j'espère qu'ils le changeront dans le futur. La documentation MSDN indique que certaines modifications peuvent se produire dans les versions futures.
Vous pouvez utiliser la méthode ExecuteQuery() pour transmettre votre propre SQL.
Etes-vous sûr que le champ est nullable dans la base de données? Le modèle de données linq est-il mis à jour en conséquence? Si vous utilisez un mappage basé sur des attributs, il doit y avoir un paramètre CanBeNull=true
dans l'attribut [Column(...)]
.
Bon point, même si elle n'a pas été définie comme une colonne nullable lorsque vous avez ajouté la table au concepteur de Linq2SQL, vous devrez supprimer la table du concepteur et 'rajoutez-le' pour que le schéma mis à jour change. – Nate
Oui bon point, la colonne était nullable bien – Karsten
@tvanfosson (affiché comme une réponse pour obtenir une meilleure mise en forme du code)
Oui, vous avez raison, quelque chose d'étrange se passe, quelque chose au-delà de ma connaissance C#.
from.ImageThumbnail est byte [] to.ImageThumbnail est binaire
Utilisation de la? ou ?? les opérateurs ne fonctionneront pas, si je l'utilise juste si ça marche, bizarre. Je ne vois pas pourquoi :-)
if (from.ImageThumbnail != null) // works
{
to.ImageThumbnail = from.ImageThumbnail;
}
else
{
to.ImageThumbnail = null;
}
to.ImageThumbnail = from.ImageThumbnail != null ? from.ImageThumbnail : null; // fails
to.ImageThumbnail = from.ImageThumbnail ?? null; // fails
Il y a un opérateur de conversion implicite de byte [] en binaire (http://msdn.microsoft. com/fr-fr/library/system.data.linq.binary.op_implicit.aspx) qui gère l'assignation. L'opération de conversion renvoie une exception dans le cas où l'argument est null. Ceci est effectivement noté dans la documentation pour l'opérateur. Stick avec la première version du code. – tvanfosson
FYI - vous devriez probablement éditer votre question et ajouter cette information là, plutôt que dans une réponse séparée. Cela rendra votre question plus utile à ceux qui cherchent une solution au même problème. – tvanfosson
Je vois, merci pour l'info – Karsten
- 1. NULL de gestion LINQ to SQL
- 2. Champ Linq to sql et timestamp
- 3. LINQ-to-SQL Énumération avec Binary = null échoue
- 4. Django: Comment définir un champ sur NULL?
- 5. Linq to sql - Définir inheritancemapping sur la classe dérivée
- 6. Meilleure approche pour une colonne binaire avec LINQ to SQL
- 7. LinQ To SQL et DataBinding
- 8. linq to sql "Contient"
- 9. LINQ to SQL Groupement
- 10. LINQ to SQL
- 11. Chaînes LINQ to SQL et Null, comment utiliser Contains?
- 12. LINQ to SQL: propriétés des propriétés qui peuvent être null
- 13. Requête LINQ to SQL
- 14. Sql Query to Linq To Sql
- 15. LINQ To SQL Tri dynamique
- 16. Erreur Linq to sql avec champ d'incrément d'identité
- 17. Collection enfant Linq to SQL
- 18. Comment définir manuellement un champ d'identité dans LINQ-To-SQL (IDENTITY INSERT)
- 19. varchar (max) + linq to sql
- 20. Classes LINQ to SQL
- 21. LINQ to SQL context.GetChanges
- 22. LINQ-to-SQL IN()
- 23. Aide sur la requête Linq to sql
- 24. LINQ To SQL Paging
- 25. LINQ to SQL, Generalization
- 26. requêtes linq-to-sql imbriquées
- 27. Linq To Sql assistance vb.net
- 28. étrange erreur LINQ to SQL
- 29. LINQ to SQL Insert
- 30. Linq to Sql Mapping
J'ai posté mon commentaire comme réponse pour obtenir un meilleur formatage du code, voir ci-dessous – Karsten