peut-être quelqu'un peut vous aider.Problème avec Mapping/Casting Linq-to-Sql sur différents types
Je souhaite disposer d'un type de données Linq-Class différent.
Cela fonctionne:
private System.Nullable<short> _deleted = 1;
[Column(Storage = "_deleted", Name = "deleted", DbType = "SmallInt", CanBeNull = true)]
public System.Nullable<short> deleted
{
get
{
return this._deleted;
}
set
{
this._deleted = value;
}
}
Bien sûr. Mais pas quand je veux mettre une certaine logique pour booléenne, comme ceci:
private System.Nullable<short> _deleted = 1;
[Column(Storage = "_deleted", Name = "deleted", DbType = "SmallInt", CanBeNull = true)]
public bool deleted
{
get
{
if (this._deleted == 1)
{
return true;
}
return false;
}
set
{
if(value == true)
{
this._deleted = (short)1;
}else
{
this._deleted = (short)0;
}
}
}
Je reçois toujours erreur d'exécution:
[TypeLoadException: GenericArguments[2], "System.Nullable`1[System.Int16]", on 'System.Data.Linq.Mapping.PropertyAccessor+Accessor`3[T,V,V2]' violates the constraint of type parameter 'V2'.]
Je ne peux pas changer la base de données peu .. je dois avoir lancer dans la classe de cartographie.
** Mise à jour
Selon mmcteam, coulée dans la méthode unmapped le tour est joué. Vous ne savez pas si vous utilisez le mappage OR de cette façon, mais cela fonctionne.
private System.Nullable<short> _deleted = 1;
public bool deleted
{
get
{
if (this._deleted == 0)
{
return false;
}
else
{
return true;
}
}
set
{
if (value)
{
this._deleted = 1;
}
else
{
this._deleted = 0;
}
}
}
[Column(Storage = "_deleted", Name = "deleted", DbType = "SmallInt", CanBeNull = true)]
private short? deleted_smallint
{
get
{
return this._deleted;
}
set
{
this._deleted = value;
}
}
** AVIS/PROBLÈME
Vous ne pouvez pas utiliser les méthodes ne sont pas mappés sur les requêtes LINQ!
var result = from p in dc.Products
where p.enabled && !p.deleted
select p;
provoque une exception SQL non prise en charge. Sans la condition where, les données sortent avec des valeurs correctes.
Non, car cela ne fonctionne pas aussi. dbtype n'est pas Boleanen, est SmallInt immuable! Cela provoque juste une autre erreur d'exécution de type de données incorrect Boolean. – csharpnoob