La conversion vers le type de la valeur à cause du manque de matérialisée valeur est null
Je suis en utilisant AutoMapper à mon projet entités de modèles.
Ce sont les modèles que j''mm de cartographie et de:
public partial class Material
{
public System.Guid Id { get; set; }
public string Description { get; set; }
public string EAN { get; set; }
public virtual InventoryLine InventoryLine { get; set; }
}
public partial class InventoryLine
{
public System.Guid MaterialId { get; set; }
public Nullable<decimal> Quantity { get; set; }
public decimal Price { get; set; }
public Nullable<System.DateTime> LastInspectionDate { get; set; }
public int TransactionsSinceLastInspection { get; set; }
public virtual Material Material { get; set; }
}
public class InventoryLineViewModel
{
public string EAN { get; set; }
public string Description { get; set; }
public decimal Price { get; set; }
public decimal? Quantity { get; set; }
public DateTime? LastInspectionDate { get; set; }
}
J'ai cette cartographie:
CreateMap<Material, InventoryLineViewModel>().ForMember(d => d.Price, o => o.MapFrom(s => s.InventoryLine.Price)).ForMember(d => d.Quantity, o => o.MapFrom(s => s.InventoryLine.Quantity)).ForMember(d => d.LastInspectionDate, o => o.MapFrom(s => s.InventoryLine.LastInspectionDate));
Chaque fois que j'exécute ce code:
Mapper.Initialize(c => { c.AddProfile(new MapperProfile()); });
return context.Material.Include(i => i.InventoryLine).ProjectTo<InventoryLineViewModel>().ToList();
J'obtiens cette erreur:
La distribution de valeur de type 'System.Virgule' a échoué parce que la matérialisée valeur est null. Le résultat de ce type de paramètre générique ou la requête doit utiliser un type nullable.
Comment est-ce possible quand tous les types que je suis de cartographie et de sont du même type? J'ai même essayé de faire le Quantity
propriété d'un non-valeurs null dans la base de données et du modèle. J'obtiens toujours la même erreur.
Toute aide est très appréciée 🙂
- Quel est le type de la relation entre
Material
etInventoryLine
? Je veux dire, c'estone-to-one
, mais dont l'extrémité est obligatoires et facultatifs. Tout couramment configuration? - Le matériel est nécessaire et InventoryLine est facultatif. Pas couramment la configuration 🙂
- Peut-être un peu hors-sujet, mais je vous conseille
valueinjecter
que votre mapper plugin au lieu de cela, beaucoup mieux que AutoMapper, à mon avis honnête. - Pas vraiment une réponse, mais vous pouvez trouver que cela vaut la peine de lire: devtrends.co.royaume-uni/blog/...
Vous devez vous connecter pour publier un commentaire.
Le problème est que le modèle de vue
Price
type de propriété est non nullable, mais depuis la sourceInventoryLine
est facultatif, EF (comme suggéré dans le message de l'exception) doit être en mesure de stocker un nullable valeur lorsque la source estnull
.Vous pouvez résoudre le problème de deux façons:
(A) de Rendre le modèle de vue de la propriété nullable:
(B) Maintenir le modèle d'affichage et de modification de la cartographie comme suit:
ou