• 10 odgovora
  • 5.372 pregleda
MVC App bez EF u modelima 03.08.2016. u 21:13 · pre 124 meseci #1
Drustvo primoren sam da radim app bez koriscenja Entity Frameworka u asp.net mvc-u.
Sto se mene tice ja se nebi odvajao od EF, pokusavao sam da ubedim ali neide.

Na koju foru mogu da zadrzim modele ali bez EF?

Neka moja zamisao je da koristim klasicnu System.Data.SqlClient assembly
Napravim npr u model diru klasu Blog koja bi mi bila model sa aksesorima nrp Title, Text, Created, Modifed da kazemo simple.
Da napravim BlogRepository sto bi bilo kao u EF Context klasa gde bi vracao upite (FintAll, Find, Insert, Update).

Sve u svemu ovaj moj primer koliko sam ja predpostavio ne pije vodu i da je ovo za kantu ako ovako uradim.

Mislim totalno mi sada ovo novo nikada nisam radio bez EF sem u web page projektima tu sam koristion WebMatrix.Data assemply i to sljaka super, ali de WebMatrix.Data da koristim u MVC malo bzv a?

Moze neki primer ili da me neko usmeri kako ovo najbolje uraditi a i da moze da se radi unit testing.

Hvala unapred
Potpis
Kada vidjamo uvek ista lica, na kraju ona postaju deo našeg života. A kada postanu
deo našeg života,
onda žele i da nam ga izmene. I ako ne bude po njihovom, nije im pravo. Jer, svaki
čovek ima tačnu predstavu kako bi trebalo da živimo svoj život. A nikad nemaju pojma
kako treba da prožive sopstveni život.
Re: MVC App bez EF u modelima 03.08.2016. u 22:01 · pre 124 meseci #2
Da ne zalazimo u to zasto ne mozes koristiti EF, mozes bez problema koristiti SqlConnection/Command/Reader.
Svodi ti se na to da napravis instancu konekcije, komande, povezes ih, dodas string sa query-em u komandu i dodas parametre (uvek koristi parametre, nemoj sastavljati query nadovezivanjem stringova), otvoris konekciju, izvrsis komandu i iscitas vrednost (ako je select query), zatvoris konekciju.
Mozes naci primer na netu.

E sad, imaces, neke modele koji ti preslikavaju tabele ili tacnije, koje preslikavaju rezultate upita. Ako ti je neki mikro projekat, mozes sve da radis pesaka kao sto sam naveo u drugoj recenici. Ako je projekat malko veci, zavisno koliko imas vremena da odvojis za to, mozes sebi olaksati stvari tako sto uradis neke od sledecih stvari:
Napravis pomocnu fukciju za izvrsavanje query-a kojoj prosledjujes samo query i parametre. Tacnije, trebace ti tri takve uz neki zajednicki deo: za Execute (vraca reader), ExecuteScalar i ExecuteNonQuery. Obrati paznju na zatvaranje konekcije kod prve.
Ako imas malo modela, mozes svakom dodati funkciju koja iz reader-a ucitava vrednosti iz kolona u njegove property-e.
Ako imas mnogo modela, mozes napraviti pomocnu klasu/metodu koja refleksijom ucitava iz kolona reader-a u property-e. Ovo ti je lakse ako se imena property-a poklapaju sa imenima kolona. Ako se ne poklapaju, mozes dodavati atribute koji definisu imena kolona sa kojima se property sinhronizuje.
Ako imas gomilu standardnih GetByID, Update, Insert, DeleteByID, opet mozes pomocu refleksije, slicno prethodnom generisati query-e.

I tako, ako imas dovoljno potrebe i vremena, napravis sebi mini EF :) (veci deo navedenog i on radi)
S tim da ti sebi mozes napraviti da radi u heppy flow-u i po potrebi sporedne slucajeve, ne moras pokrivati razne granicne slucajeve i mogucnosti da neko koristi to kako ne treba (pravis za sebe).

P.S. Ako nisi vec radio na ovaj nacin (direktno sa konekcijama i komandama), mozda ce ti neke od stvari koje sam navodio biti nejasne, ali kako se budes udubljivao, mozes se vratiti na ovaj post pa ce biti jasnije :)
Potpis
Nebojsa Milanovic:
-Trumpa smatram vrhunskim predsednikom i voleo bih da živim u državi na čijem je on čelu
-Rusija ne laže, ne vodi osvajačke ratove
-Trump je svetla tačka u USA blatu
-Elon Musk, možda najpametniji i najtrezveniji Amerikanac
Re: MVC App bez EF u modelima 04.08.2016. u 10:38 · pre 124 meseci #3
Citat:
alfa-pro: Drustvo primoren sam da radim app bez koriscenja Entity Frameworka u asp.net mvc-u.
Sto se mene tice ja se nebi odvajao od EF, pokusavao sam da ubedim ali neide.

Na koju foru mogu da zadrzim modele ali bez EF?

Neka moja zamisao je da koristim klasicnu System.Data.SqlClient assembly
Napravim npr u model diru klasu Blog koja bi mi bila model sa aksesorima nrp Title, Text, Created, Modifed da kazemo simple.
Da napravim BlogRepository sto bi bilo kao u EF Context klasa gde bi vracao upite (FintAll, Find, Insert, Update).

Sve u svemu ovaj moj primer koliko sam ja predpostavio ne pije vodu i da je ovo za kantu ako ovako uradim.

Mislim totalno mi sada ovo novo nikada nisam radio bez EF sem u web page projektima tu sam koristion WebMatrix.Data assemply i to sljaka super, ali de WebMatrix.Data da koristim u MVC malo bzv a?

Moze neki primer ili da me neko usmeri kako ovo najbolje uraditi a i da moze da se radi unit testing.

Hvala unapred



Pre bih rekao da ti je neko ucinio uslugu:) EF nije jedini ORM tako da imas druge koji mogu da ga zamene.

Poenta je da model, koji je u kontrolerima/view-ima, nema jaku vezu (tight/strongly coupled) sa bazom koja je pozadi.
Tako da eventualne promene RDBS (baze) ne bi smele da ti sruse logiku u web delu.

Pojednostavljeno arhitektura bi bila nesto u stilu model => koji koristi layer/repository => koji koristi neki ORM.
Re: MVC App bez EF u modelima 04.08.2016. u 11:13 · pre 124 meseci #4
Aj probacu nesto od ovoga navedeno pa cu da vidim na sta ce to da ispadne. Pa ovaj sada projekat koji ce se raditi je omanji nista specijalno ali imam prikolicu projekata. Cela prica firme je da batali EF za stalno u svim projektima
Potpis
Kada vidjamo uvek ista lica, na kraju ona postaju deo našeg života. A kada postanu
deo našeg života,
onda žele i da nam ga izmene. I ako ne bude po njihovom, nije im pravo. Jer, svaki
čovek ima tačnu predstavu kako bi trebalo da živimo svoj život. A nikad nemaju pojma
kako treba da prožive sopstveni život.
Re: MVC App bez EF u modelima 04.08.2016. u 12:02 · pre 124 meseci #6
Citat:
alfa-pro: Cela prica firme je da batali EF za stalno u svim projektima

Cisto iz radoznalosti.. Zasto? :)
Potpis
Nebojsa Milanovic:
-Trumpa smatram vrhunskim predsednikom i voleo bih da živim u državi na čijem je on čelu
-Rusija ne laže, ne vodi osvajačke ratove
-Trump je svetla tačka u USA blatu
-Elon Musk, možda najpametniji i najtrezveniji Amerikanac
Re: MVC App bez EF u modelima 04.08.2016. u 15:14 · pre 124 meseci #7
Da, i mene to interesuje. Mogu da razumem EF4, to je stvarno bilo umobolno, ali sta fali EF6.1.3? I jos bolje, sta fali EF Core 1.0 (EF7)?

Potpis
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog
naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji
je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan,
sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv - Z.Đinđić
Re: MVC App bez EF u modelima 05.08.2016. u 11:04 · pre 124 meseci #8
Pa politika firme, izgleda da se to nesvidja tom senioru koji je nama sef a on je tako kao neki.... Mislim da LINQ upite ne moze vise nista da mi zameni ali ajde ko sam ja tu da se pitam nesto
Potpis
Kada vidjamo uvek ista lica, na kraju ona postaju deo našeg života. A kada postanu
deo našeg života,
onda žele i da nam ga izmene. I ako ne bude po njihovom, nije im pravo. Jer, svaki
čovek ima tačnu predstavu kako bi trebalo da živimo svoj život. A nikad nemaju pojma
kako treba da prožive sopstveni život.
Re: MVC App bez EF u modelima 05.08.2016. u 22:35 · pre 124 meseci #9
LINQ kao LINQ nije nikakva misterija, to je samo laksi nacin da se izgradi tzv "expression tree", na provajderu je da implementira IQueryable i pretoci to drvce u konkretan upit. Samim tim, ne postoji ogranicenje na sta se LINQ moze primeniti (npr NHibernate ima odlicnu implementaciju).

Iako je upotreba SqlCommand paterna ogranicavajuca u tom smislu da ne mozes da definises upite, uvek mozes rezultat da pretabas u objektni model i da onda koristis LINQ to objects i da te objekte koristis u MVCu. To mozes da uradis bilo preko recimo Dapper-a ili sam, kroz nad=upit ili kroz konverziju reader-a u iterator metod

query:
Code (csharp):

var list = reader.Cast<IDataRecord>()
                 .Select(dr => new MyType { Ime = dr.GetString(0), ... })
                 .ToList();
 


iterator
Code (csharp):

        private static IEnumerable<CustomerDefinition> ProcessCustomerDataReader(DbDataReader dr, CancellationToken token)
        {
            if (dr.HasRows)
            {
                while (dr.Read() && !token.IsCancellationRequested)
                    yield return new CustomerDefinition()
                    {
                        CustomerNo = (int)dr.GetDecimal(0),
                        Title = dr.IsDBNull(1) ? null : dr.GetString(1),
                        FirstName = dr.IsDBNull(2) ? null : dr.GetString(2)                    };
            }
        }

    from c in ProcessCustomerDataReader(dr, token)
    ....

 
Potpis
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog
naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji
je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan,
sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv - Z.Đinđić
Re: MVC App bez EF u modelima 06.08.2016. u 10:40 · pre 124 meseci #10
Ma nemam ja problem sa LINQ upitima kao sto sam gore vec napomenuo. Da se ja pitam nikada ne bi menjao EF a ni koriscenje LINQ upita!
Potpis
Kada vidjamo uvek ista lica, na kraju ona postaju deo našeg života. A kada postanu
deo našeg života,
onda žele i da nam ga izmene. I ako ne bude po njihovom, nije im pravo. Jer, svaki
čovek ima tačnu predstavu kako bi trebalo da živimo svoj život. A nikad nemaju pojma
kako treba da prožive sopstveni život.
Re: MVC App bez EF u modelima 05.12.2016. u 21:24 · pre 120 meseci #11
Probaj ovo na posao mi je novija verzija, ovo smo na posla sami uradili da bi mogli bolje da radimo sa stored procedure.

evo ti i neki primer, pogledaj fajlove

*ExtensionMethods
*Extensions
i resto :D nismo pisali dokumetaciju tako da trebas sam da razumes kako radi :D a inace pola government institution u Maltu rade sa ovim (posto mi uglavno radimo te vladine zaebacije) i mnogo je dobro :D

Code:

public class User
{
    [ProcedureParameter("@name")] //primer namesto onaj dole linq da se ubijes od pisanja 
    [ResultParameter("Name")]  //ExecuteProcedureWithResult sama upise sve rezultate u odgvarajuca polja
    public string Name { get; set; }
 
    [ProcedureParameter("@surname")]
    [ResultParameter("Surname")]
    public string Surname { get; set; }
 
    [ProcedureParameter("@id", true)]
    [ResultParameter("Id")]
    public int ID { get; set; }
}
 
Executing on the Database
 
User[] users = db.ExecuteProcedureWithResult<User>("[Users].[usp_GetAllUsers]");
 
Sample
 
db.OpenConnection();
User[] users = db.ExecuteProcedureWithResult<User>("[Users].[usp_GetAllUsers]");
db.CloseConnection();
MessageBox.Show(users.Select(x => String.Format("{0} {1}", x.Name, x.Surname)).Aggregate((x, y) => String.Format("{0}\n{1}", x, y)));

        IDataBaseProvider datah =
            SqlAccessLayer.CreateDatabaseProvider(
                ConfigurationManager.ConnectionStrings["ArtemisconnString"].ToString().Trim());

        List<ApplicationList> agendas = new List<ApplicationList>();

        var param = datah.GetParameter("@date", DbType.Date, date);

        datah.OpenConnection();

        agendas =
            datah.ExecuteProcedureWithResult("usp_GetAgendasDetailsByDate", param)
                .Select(
                    x =>
                        new ApplicationList
                            {
                                SystemKey = x.Read<int>("SystemKey"),
                                Architect = x.Read<string>("Architect"),
                                CaseNumber = x.Read<string>("Case Number"),
                                ItemNumber = x.Read<string>("ItemNumber"),
                                Location = x.Read<string>("Location"),
                                Proposal = x.Read<string>("Proposal"),
                                Recommendation = x.Read<string>("Recommendation")
                            })
                .ToList();

        datah.CloseConnection();
Potpis
Kude tumbe i tri bandere
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme