Selon la façon dont je la carte mes requêtes LINQ à mes objets de domaine, je reçois l'erreur suivanteLINQ to SQL Traduction
Le membre « membre » a pas de traduction pris en charge à SQL.
Ce code provoque l'erreur:
public IQueryable<ShippingMethod> ShippingMethods {
get {
return from sm in _db.ShippingMethods
select new ShippingMethod(
sm.ShippingMethodID,
sm.Carrier,
sm.ServiceName,
sm.RatePerUnit,
sm.EstimatedDelivery,
sm.DaysToDeliver,
sm.BaseRate,
sm.Enabled
);
}
}
Ce code fonctionne très bien:
public IQueryable<ShippingMethod> ShippingMethods
{
get
{
return from sm in _db.ShippingMethods
select new ShippingMethod
{
Id = sm.ShippingMethodID,
Carrier = sm.Carrier,
ServiceName = sm.ServiceName,
EstimatedDelivery = sm.EstimatedDelivery,
DaysToDeliver = sm.DaysToDeliver,
RatePerUnit = sm.RatePerUnit,
IsEnabled = sm.Enabled,
BaseRate = sm.BaseRate
};
}
}
Ceci est mon TestMethod je teste avec:
[TestMethod]
public void Test_Shipping_Methods() {
IOrderRepository orderRepo = new SqlOrderRepository();
var items = orderRepo.ShippingMethods.Where(x => x.IsEnabled);
Assert.IsTrue(items.Count() > 0);
}
Comment fonctionne la manière que j'instancie mon objet affecte la traduction de linq en sql?
Merci Ben
Que ferais-je dans le cas où j'ai besoin d'utiliser un constructeur? Par exemple, j'ai besoin d'initialiser l'état de l'objet et ceci est fait en utilisant une énumération qui est conservée dans la base de données. Par conséquent, j'ai besoin de transmettre cette valeur dans le constructeur. Merci –
Vous pouvez avoir un constructeur, mais pas un constructeur avec des paramètres. L'initialisation devrait aller dans le constructeur sans paramètre (= default). –
Ok, mais je crois que l'initialisation en utilisant la syntaxe d'initialisation d'objet ci-dessus frappe le constructeur par défaut avant que les valeurs de propriété ne soient assignées. Donc, il semble que si j'ai besoin d'initialiser une propriété d'état basée sur celle que je suis en train de mapper ci-dessus, je vais devoir ajouter une sorte de méthode initialize et l'appeler après que le mapping soit terminé. –