2017-06-07 10 views
1

J'utilise EF6Entity Framework transféré des données en octets

c'est ma classe

public partial class tbl_Persons 
    { 
     public int ID { get; set; } 
     public string Name { get; set; } 
     public byte Age { get; set; } 
    } 

Combien (octets) seront transférés du serveur au client lorsqu'il est utilisé ce code?

using (var db = new testEntities()) 
{ 
    var q = db.tbl_Persons.FirstOrDefault(a => a.ID == 1234).Age; 
} 

juste transféré {(Age) (1 octet)} ou transférées toutes les propriétés {(ID + Nom + âge) (10 octets)} puis sélectionnez l'âge sur le client?

Comment puis-je transférer uniquement (Âge) (1 octet)? (Je dois transférer des données minimales du serveur)

+0

BTW le code suivant 'var q = db.tbl_Persons.FirstOrDefault (a => a.ID == 1234) .Age;' peut jeter. Vous devriez avoir écrit: 'var q = db.tbl_Persons.FirstOrDefault (a => a.ID == 1234) ?. Age:' – tschmit007

+1

BTW: stocker un âge est risqué (stocker une date de naissance/année). Limiter l'âge d'une personne à 128 est risqué; – tschmit007

+0

Merci. mais ce n'est pas ma vraie classe. c'est juste pour le test –

Répondre

2

L'expression

var q = db.tbl_Persons.FirstOrDefault(a => a.ID == 1234).Age; 

est équivalent

var person = db.tbl_Persons.FirstOrDefault(a => a.ID == 1234); 
var age = person.Age; 

Alors vous devez d'abord récupérer et se matérialisent un objet entier (avec toutes les propriétés) de la base de données , puis prenez une seule propriété (byte dans votre cas) à partir du résultat.

Pour chercher juste la propriété en question, vous devez utiliser un pas si concise, mais plus efficace Where + Select + FirstOrDefault (pas de version sous-jacente):

var age = db.tbl_Persons.Where(p => p.ID == 1234).Select(p => p.Age).FirstOrDefault(); 

ou avec la syntaxe de requête

var age = (from p in db.tbl_Persons where p.ID == 1234 select p.Age).FirstOrDefault(); 
+0

Ceci est la meilleure réponse pour moi –