Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 2 odgovora
  • 1.831 pregleda

Najnovija ↓

Entity framework i validacija 21.12.2010. u 21:36 · pre 193 meseca #1
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.
Re: Entity framework i validacija 23.12.2010. u 12:31 · pre 193 meseca #2
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?
Potpis
if it walks like a duck and quacks like a duck, it could be a dragon doing a duck
impersonation.
Re: Entity framework i validacija 16.01.2011. u 20:31 · pre 192 meseca #3
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.
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme