Pour mon application ASP.NET MVC 2, j'utilise Entity Framework 1.0 comme couche d'accès aux données (référentiel). Mais j'ai décidé que je veux retourner POCO. Pour la première fois, j'ai rencontré un problème lorsque je voulais obtenir une liste des marques avec leurs logos optionnels. Voici ce que j'ai fait:Linq to Entities et mappage des relations de clé étrangère POCO (1 à 0..1)
public IQueryable<Model.Products.Brand> GetAll()
{
IQueryable<Model.Products.Brand> brands = from b in EntitiesCtx.Brands.Include("Logo")
select new Model.Products.Brand()
{
BrandId = b.BrandId,
Name = b.Name,
Description = b.Description,
IsActive = b.IsActive,
Logo = /*b.Logo != null ? */new Model.Cms.Image()
{
ImageId = b.Logo.ImageId,
Alt = b.Logo.Alt,
Url = b.Logo.Url
}/* : null*/
};
return brands;
}
Vous pouvez voir dans les commentaires ce que je voudrais réaliser. Cela a bien fonctionné chaque fois qu'un Brand
avait un Logo
sinon c'est par une exception que vous pouvez assigner une valeur nulle au type int non null (pour Id). Ma solution de contournement consistait à utiliser nullable dans la classe POCO mais ce n'est pas naturel - alors je dois vérifier non seulement si Logo
est nul dans ma couche Service ou Contrôleurs et Vues mais surtout pour Logo.ImageId.HasValue
. Il n'est pas justifié d'avoir une propriété non null
Logo
si l'ID est null
.
Quelqu'un peut-il penser à une meilleure solution?
S'il n'est pas valide que Logo soit non nul si ImageId est null, cela indiquerait un problème avec votre base de données sous-jacente. Si votre EF ORM mappe la propriété ImageId de l'objet Logo sur Nullable, c'est parce que la colonne de la base de données accepte les valeurs NULL, mais s'il s'agit d'un champ clé, elle ne doit pas accepter les valeurs NULL. –
jeffora