25 messaggi dal 25 febbraio 2008
Ciao a tutti, sto provando ad usare l' entity data model per leggere/scrivere i dati del mio database.
Sono riuscito ad usarlo, riesco sia a leggere che a scrivere, ma il mio problema nasce durante la validazione dei dati. Vorrei usare le DataAnnotations per evitare di riscrivere diverse volte dei controlli.
Ho seguito questo articolo http://msdn.microsoft.com/it-it/library/ee256141.aspx ma non sono riuscito a far funzionare la validazione.
La classe è definita in due file:
  
using System.ComponentModel.DataAnnotations;  
  
namespace MvcApp.Model  
{  
    [MetadataType(typeof(contactsMD))]  
    public partial class contacts  
    {  
        public class contactsMD  
        {  
            [StringLength(10,ErrorMessage="Al max 10 char")]  
            public object nome;  
        }  
    }  
}  

e il file generato dal componente:
  
public partial class contacts : global::System.Data.Objects.DataClasses.EntityObject  
    {}  
  
[global::System.Data.Objects.DataClasses.EdmScalarPropertyAttribute(IsNullable=false)]  
        [global::System.Runtime.Serialization.DataMemberAttribute()]  
        public string nome  
        {  
            get  
            {  
                return this._nome;  
            }  
            set  
            {  
                this.OnnomeChanging(value);  
                this.ReportPropertyChanging("nome");  
                this._nome = global::System.Data.Objects.DataClasses.StructuralObject.SetValidValue(value, false);  
                this.ReportPropertyChanged("nome");  
                this.OnnomeChanged();  
            }  
        }  

Nel secondo file ho messo le dichiarazioni della classe e quelle dell' attributo.
Mi sembra di aver seguito l' esempio del sito, come mai la validazione per la lunghezza della stringa del primo file non viene effettuata?
E lato ASP.NET MVC invece che codice hai scritto? Stai utilizzando almeno la versione 2? Ti aspetti la validazione client side o stai testando la server side?

m.
25 messaggi dal 25 febbraio 2008
Grazie per la risposta.
Sono riuscito a risolvere..il problema era dato dalla classe contactMD: era all' interno di contact, mentre andava messa fuori.
Al momento la validazione la effettuo lato server con il framework 3.5.

Vi chiedo aiuto per un altro problema: ho creato un semplice script linq che estrae dal db(mysql) una lista di categorie e le mostra in un dropdownlist.
La tabella contiene un id e un nome, la mia query è così:
  
var lista = from item in context.categorie  
                                      select (new SelectListItem  
                                      {  
                                          Text = item.nome,  
                                          Value = item.id.ToString()  
                                      });  

Durante l' esecuzione ricevo un errore:
  
LINQ to Entities non riconosce il metodo 'System.String ToString()', che pertanto non può essere convertito in un'espressione di archivio.  

Ho capito che il problema è nella conversione tra intero e stringa nel codice linq, ma non so come risolvere. Il campo id deve essere per forza int(viene mappato così dal database).
Come posso convertire l' intero in stringa nell' entity framework?
Prova con
var lista = from item in context.categorie.ToList()
select (new SelectListItem 
{ 
Text = item.nome, 
Value = item.id.ToString() 
});


Ciao!
m.
25 messaggi dal 25 febbraio 2008
Grazie mille...così funziona.
Se ho ben capito usando il metodo ToList vado a lavorare su un' interfaccia IList(che mi premette di usare il tostring) invece che su IEnumerable, giusto?
No, se fai la query LINQ su context.categorie, stai lavorando sull'implementazione IQueryable di Entity Framework, che prova a tradurre in SQL ogni chiamata ad eventuali metodi (ad es. il tuo ToStirng()), da cui l'errore.

Se invece usi context.categorie.ToList() prendi tutte le categorie e ci popoli una lista in memory, su cui poi effettui la query LINQ. L'IQueryable, a questo punto, sarà quello di Linq to Objects e non più Linq to Entities.

L'ho detto bene?
m.
25 messaggi dal 25 febbraio 2008
Grazie mille!!!
Mi sa che devo mettermi a studiare un pò

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.