Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Entity framework i validacija

[es] :: .NET :: Entity framework i validacija

[ Pregleda: 1301 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Mikelly

Član broj: 16730
Poruke: 389
*.49.crnagora.net.



Profil

icon Entity framework i validacija21.12.2010. u 20:36 - pre 161 meseci
Na internetu vele da validaciju treba raditi u partial klasama overridujuci OnImeSvojstvaChanging/Changed metode. To je moglo i u klasicnom ADO.NET-u partial-nim prosirivanjem datatable klasa. Kazu, kad zelis odbaciti promjenu, baci exception. Ni tada nisam kapirao, kao ni sad, sto ja da radim sa tim izuzetkom??? Da li da ga obradjujem upravo u toj metodi ili nedje drugo (da li ga je uopste moguce hvatati nedje drugo). Ono sto mi je jasno, ako tu bacim izuzetak, a ne obradim ga, puca mi program. Zbog toga sam i u ADO.NET-u validaciju vrsio prijavljujuci se na ColumnChanging/Changed dogadjaje datatable objekta, a ne prosirivajuci partialnim klasama. Kao prvo, ja kad bacim izuzetak, uopste mi se ne odbaci promjena:

Code:

        partial void OnMaticni_BrojChanging(string value)
        {
            try
            {
                if (value.Length != 13)
                {
                    throw new ArgumentException("Neispravan matični broj!");
                }
            }
            catch (ArgumentException e)
            }
        }


Dakle, ako sam unio maticni broj sa manje od 13 karaktera, i posle bacenog excpetion-a promjena vazi...

Onda, probao sam da value promjenljivu podesim na ispravnu vrijednost, to mi je radilo u ADO.NET-u sa e.ProposedValue objektom, ali bez uspjeha:

Code:

        partial void OnMaticni_BrojChanging(string value)
        {
            try
            {
                if (value.Length != 13)
                {
                    throw new ArgumentException("Neispravan matični broj!");
                }
            }
            catch (ArgumentException e)
            {
                value = this._Maticni_Broj;
            }
        }


Cim izadjem iz oblasti vazenja ove metode, u pregenerisani kod, promjena koju sam upravo odradio, ne vazi. Value promjenljiva u sledecoj metodi/propertyju ima onu vrijednost koju sam joj dodijelio kroz UI.

Code:

        public global::System.String Maticni_Broj
        {
            get
            {
                return _Maticni_Broj;
            }
            set
            {
                OnMaticni_BrojChanging(value);
                ReportPropertyChanging("Maticni_Broj");
                _Maticni_Broj = StructuralObject.SetValidValue(value, false);
                ReportPropertyChanged("Maticni_Broj");
                OnMaticni_BrojChanged();
            }
        }


Svaka sugestija, savjet ili pomoc da ukapiram kako ovo radi je dobrodosla...

Pozdrav.
 
Odgovor na temu

Boris B.
Ljubljana

Član broj: 213615
Poruke: 286
*.evj-kabel.net.



+14 Profil

icon Re: Entity framework i validacija23.12.2010. u 11:31 - pre 161 meseci
Grešiš u tome što hvataš taj exception kada ga baciš, treba da ga pustiš da ispliva u UI layer, i postavi CausesValidation = true od data-bound kontrole, ako nije već postavljen.
Mada cela ta stvar sa bacanjem exception-a u PropertyChanging samo zbog validacije ne miriše dobro, zašto ne napraviš u partial-u metod Validate koji validira ceo entitet, i onda bacaš exception u dataBoundControl.Validating?
if it walks like a duck and quacks like a duck, it could be a dragon doing a duck
impersonation.
 
Odgovor na temu

Mikelly

Član broj: 16730
Poruke: 389
*.crnagora.net.



Profil

icon Re: Entity framework i validacija16.01.2011. u 19:31 - pre 160 meseci
Hvala na odgovoru, Borise.

Malo sam istrazivao na ovu temu...

Kada bacam exception, a hvatam ga van entity klase, u code behind-u forme, exception ce biti uhvacen. Ali, nema sanse da ga mogu uhvatiti ako vrijednost mijenjam u nekoj kontroli. U Windows Forms, kada postavim CausesValidation = true, kao sto si mi ti rekao, program jednostavno pukne. U WPF-u ima jedan unaprijed definisan ExceptionValidationRule, koji bi trebao to da uhvati, ali opet nista.

Tek kada validaciju vrsim preko custom ValidationRule-va, tj. kada kreiram taj rule nasledjivanjem apstraktne klase ValidationRule, onda nesto pocinje da sljaka. Citav taj koncept sa Validation Rule-ovima uopste nije los: ima cetiri niova validacije i moze se vrsiti validacija nad vise nivoa objekata (master->child) uz pomoc Binding Grupa.

Ali to nije ono sto trazim, jer izmjestam logiku validacije van samih klasa, a to je bas ono sto hocu da izbjegnem.

I ne znam imas li iskustva sa entity framework-om? Zaista je sjajan sto se tice nekih stvari, ali, dje su expression kolone? moze li entitet biti zasnovan na rezultatu stored procedure ili se procedura moze samo mapirati u funkciju, i tome slicno.


Pozdrav i hvala.
 
Odgovor na temu

[es] :: .NET :: Entity framework i validacija

[ Pregleda: 1301 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.