Archief - C# uitleg gevraagd :)

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

spikie

Legacy Member
ik ben bezig met de mvc tutorial op asp.net en ben daar volgende code tegengekomen:

Code:
[COLOR=white][SIZE=3][FONT=Courier New]int? count = (from cartItems [/FONT]in[/SIZE] [SIZE=3]storeDB.Carts [/SIZE][/COLOR]
[SIZE=3][COLOR=white]  where cartItems.CartId == shoppingCartId [/COLOR][/SIZE]
[SIZE=3][COLOR=white]  select (int?)cartItems.Count).Sum(); [/COLOR][/SIZE]
 
[COLOR=white][SIZE=3]return[/SIZE] [SIZE=3]count ?? 0;[/SIZE][/COLOR]

kan mij iemand uitleggen waar die vraagtekens voor zijn bij int? en bij count ??

voor de rest snap ik alles, alleen het nut van die vraagtekens ontgaat mij

thx :)

Tyfius

Legacy Member
Die eerste ? dient om aan te geven dat het resultaat nullable can zijn. (Nullable Types (C#))

Die ?? is het equivalent van return (count == null) ? null : 0;

spikie

Legacy Member
nog een vraagje, ik ben dus iets aant maken via asp.net mvc2 (om beetje mee te spelen)

ik heb een database met 2 tabellen:

user
----
ID
Naam

comment
---------
ID
tekst
UID

met een relatie tussen UID en user.ID
dan heb ik via entity framework de classes laten aanmaken enz.

nu heb ik dus een property comment.UID, is er ergens een ingebakken methode om hiermee snel de user.naam op te halen of moet ik deze logica zelf schrijven?

Svenvdb

Legacy Member
Je werkt met Entity. Dus je hebt een model. Je entities worden automatisch gegenereerd.
Maak daarnaast een partial class. Met een property die via bv ene linq query de naam gaat weergeven.

Je kan natuurlijk in je model een navigatie property toevoegen. En dan kan je gewoon met je Comment entiteit het volgende doen om de naam op te halen.
Comment.User.Naam

spikie

Legacy Member
Moto zei:
tsss ipv dien code-first boecht van EF te proberen :p

EF heeft toch een linq implementatie? gewoon daar mee doen
der staat een voorbeeld-app op codeplex die ge eens kunt bekijken
MVC Music Store
is MVC2 + EF4 linq

om nog maar eens te zagen over het probleem met EF -> Analyzing the MVC Music Store: Data Access
die music store heb ik gevolgd voor ik hieraan begon :)

ben nogal nieuw met mvc en EF, is da dan zo ne brol? mij lijkt da goe te werken.
is het dan beter om nhibernate te gebruiken ofzo?

ondertussen heb ik het dus via linq kunnen oplossen zoals voorgesteld, thx!

Moto

Legacy Member
ben nogal nieuw met mvc en EF, is da dan zo ne brol
De laatste versie niet meer naar het schijnt, probleem met EF en nHibernate toestanden is lazy-loading en N+1 Select en magische caches

En dan kan je gewoon met je Comment entiteit het volgende doen om de naam op te halen. Comment.User.Naam
Bv ge haalt uw comments list op lazy loaded, op het moment dat ge Comment.User.Naam aanspreekt gaat hij dan automatisch het user-record ophalen.
Stel dus dat ge dat doet in een loop op 10 comments = 10 + 1 keer naar de DB.

Wat zien we dan, mensen gebruiken dit op hun projectje met een lokale database paar records, ze zijn zich er niet direkt van bewust, ze testen op zeer weinig data.

Dan komt opeens oplevering, ETL gebeurd, miljoenen records opeens in den DB, de servers staan dan op een traag netwerk met nog een paar firewalls tussen en het trekt op geen KLOTEN meer qua performance.

Performance is nu toch wel ZEER belangrijk voor een applicatie,

Dus probleem met EF is,
die EDMX files die op de ballen trekken, multiple db's enzo is dat gesupport
die designer, sorry maar wie heeft dat nodig
enkel Sql-Server, er zijn bedrijven waar ze Oracle gebruiken dus, leer maar weer een nieuwe ORM aan
features zoals lazy-loading waar de bricoleur-programmeurs hun eigen mee in de voet schieten

nhibernate is btw nog slechter dan EF (que performance/linq support), maarja heeft wel ondersteuning voor meerdere DB's

Anyway op Ayende zen blop (zie dus dien analyzing url) stonden der laats paar artikel hoe ge zoiets als Nh en dus ook EF moet gebruiken

Om een overzicht te zien van ORM's -> ORM Comparison and Benchmarks on ORMBattle.NET

Die wat ik al 3 jaar gebruik staat er ook tussen BLToolkit
is eigenlijk zo'n beetje als EF maar
-zonder designer :p
-zonder lazy loading crap
-zonder code-first

maar dus ook met
-t4 templates, automatisch generen van classes
-betere Linq-support, linq over WCF zelfs
-fluent interfaces
-support voor 12 type DB's
-beste performance

spikie

Legacy Member
oke, zal ik zeker rekening mee houden!
de applicatie die ik aant maken ben zal toch nooit ingezet worden, is maar om de technologie onder de knie te krijgen

Moto

Legacy Member
Ahja en nu da ik toch als zo een ouw bomma aant zagen ben

Comment
---------
ID
Text
UserID

spikie

Legacy Member
Moto zei:
Ahja en nu da ik toch als zo een ouw bomma aant zagen ben

Comment
---------
ID
Text
UserID
genoteerd :)

ondertussen dus weer vastgelopen:
ik heb 2 controllers, een homecontroller en een commentcontroller
de edit view in homecontroller bestaat gedeeltelijk uit een partial view van commentcontroller

er staan dus ook 2 save knoppen op die view, eentje dat in principe naar /home/edit moet gaan

en eentje dat naar /comment/create moet gaan

als ik dan de gegenereerde html code bekijk als ik run dan heb ik 2 forms met als action /home/edit/ID

hoe kan ik die knop op die partial view naar die andere controller laten gaan?

ik gebruik
Code:
Html.RenderAction("Create", "Comment");
om de partial view te renderen

Moto

Legacy Member
mja van asp.net mvc2 ken ik geen bal

(ge kunt altijd den Maarten Balliauw een mailke sturen ;) )
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan