实体框架传输字节

问题描述:

数据我使用EF6实体框架传输字节

这是我的课

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

多少(字节)将被从服务器中使用此代码时传送到客户端?

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

仅有转印{(年龄)(1个字节)},或转移的所有属性{(ID +名称+年龄)(10个字节)},然后在客户端选择年龄?

如何仅传输(Age)(1字节)? (我需要从服务器传输的最小数据)

+0

顺便说一句,下面的代码'var q = db.tbl_Persons.FirstOrDefault(a => a.ID == 1234).Age;'可能会抛出。你应该写成:'var q = db.tbl_Persons.FirstOrDefault(a => a.ID == 1234)?年龄;' – tschmit007

+1

顺便说一句:存储年龄是有风险的(存储出生日期/年)。将一个人的年龄限制在128岁是有风险的; – tschmit007

+0

谢谢。但这不是我真正的课堂。它只是为了测试 –

表达

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

等同的

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

所以,你首先检索和数据库兑现一个整体对象(所有属性) ,然后从结果中获取一个属性(您的案例中的byte)。

为了获取只是有关财产,你应该使用一个不那么简洁,但更有效Where + Select + FirstOrDefault(没有谓词版本):

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

或查询语法

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

这对我来说是最好的答案 –