在C#.NET Framework 4.5.2。中工作。
我有一个包含60多个列的表,其中一些包含敏感数据。我想做的只是返回ID和Email列,这样我就不必担心请求敏感数据了,因此我设置了以下内容:
var contact = myDatabase.Resources.SqlQuery("SELECT Id, Email FROM Resources WHERE Email = @email", new SqlParameter("@email", registration.Contact.Email))
.Select(c => new { c.Id, c.Email })
.SingleOrDefault();
我希望发生的是,一个匿名对象将返回具有ID和Email属性,但是实际上发生的是我遇到以下错误:
“ Origin”类型的成员没有相应的列 在具有相同名称的数据读取器中。
Origin恰好是我不返回的数据表中的第一列名称。
我仅限于返回所有内容吗,还是可以做一些仅要求提供ID和电子邮件的事情?
答案 0 :(得分:3)
DbSet<TEntity>.SqlQuery()
仅对与指定实体映射的表执行SQL查询(例如,DbSet<Student>.SqlQuery()
仅从对应的Student表返回结果,而不从其他任何表返回结果,并且尝试执行映射结果中的所有列。see more。
您可以在DBSet<>.SqlQuery()
方法上使用“从...中选择*”,也可以使用context.Database.SqlQuery()
。