2010-04-26 4 views
1

J'utilise un modèle de données Entity Framework pour générer un site Web Dynamic Data à l'intention des utilisateurs afin de mettre à jour les données.Entity Framework, propriété non mappée et données dynamiques

L'une des entités contient une propriété de chaîne non-nullable (Description). Dans la base de données, une des lignes a une description vide (non null mais une chaîne vide). Lorsque j'essaie de mettre à jour la description, j'obtiens l'erreur de validation suivante: "Cette propriété ne peut pas être définie sur une valeur nulle". Si je mets manuellement à jour la description dans la base de données, puis modifiez la propriété, cela fonctionne comme prévu. Mais dès que je change la description dans la base de données en une chaîne vide, l'erreur de validation se produit. L'erreur se produit sur le setter de la description.

J'ai donc essayé d'ajouter une propriété de chaîne supplémentaire appelée CustomDescription qui enveloppe fondamentalement Description, fait une description ScaffoldColumn (false) dans les métadonnées de l'entité et ajouté la nouvelle propriété aux métadonnées de l'entité.

[ScaffoldColumn(true)] 
    public string CustomDescription 
    { 
     get { return this.Description; } 
     set { 
      if (value == null) 
      { 
       value = string.Empty; 
      } 
      this.Description = value; 
     } 
    } 

Cependant, que dois-je ajouter à cette propriété pour l'afficher sur le site de données dynamiques?

Répondre

0

Dans la classe de métadonnées correspondante, juste refernce comme vous le feriez un champ réel:

[MetadataType(typeof(MyClassMetadata))] 
    public partial class MyClass 
    { 
     [ScaffoldColumn(true)] 
     public string CustomString 
     { 
     return "foo"; 
     } 
    } 

public class MyClassMetadata 
{ 

    [Display(Name = "Custom")] 
    public object CustomString { get; set; }   
} 
1

problème est que l'ancienne valeur était une chaîne vide dans le champ non Nullable. Par défaut, framework le convertit en null. Pour corriger l'erreur, il suffit d'ajouter l'attribut suivant à votre champ:

[DisplayFormat(ConvertEmptyStringToNull = false)] 
public object Description { get; set; } 
Questions connexes