Users: +ID +Username +...
我想使用myDBContext.Users.Find(用户名)来填补用户.
在我目前的情况下,我不能使用他的身份证.
我必须使用完整的LINQ查询吗?例如
var user = from users in myDBContext.Users.Find(Username) where users.Username == username select users
我还试图将用户名定义为我的edmx中的主键,但是导致以下错误:
Properties referred by the Principal Role User must be exactly
identical to the key of the EntityType
CamelotShiftManagementModel.User referred to by the Principal Role in
the relationship constraint for Relationship
CamelotShiftManagementModel.AssociationUserFK1. Make sure all the key
properties are specified in the Principal
Role. C:\Code\CamelotShiftManagement\CamelotShiftManagement\Models\CamelotDB.edmx 278 11 CamelotShiftManagement
解决方法
User myUser = myDBContext.Users.SingleOrDefault(user => user.Username == username);
使用SingleOrDefault单个.如果用户不存在,则Single会抛出错误.而如果用户未找到,SingleOrDefault将返回null用户对象将返回.
SingleOrDefault和FirstOrDefault之间的选择
您可以使用SingleOrDefault和FirstOrDefault获取用户对象,但是在选择要使用的方法时考虑以下点.
>如果存在,则两者都只返回collection / database中的一个值,否则默认值.
>但是,如果您有多个用户具有相同的名称,并且您期望在执行LINQ查询时获得异常,那么使用SingleOrDefault,因为如果有多个元素可用,它将抛出异常.
>如果你不想要异常和/或你不想检查你的收集/数据库是否有重复的数据,只是想从收集/数据库中获取第一个值,然后使用FirstOrDefault与SingleOrDefault相比获得更好的性能
FirstOrDefault
>通常FirstOrDefault或当我们从集合或数据库中要求单个值(第一个)时首先使用.
>在Fist / FirstOrDefault的情况下,仅从数据库中检索到一行,因此它的执行速度略好于单/ SingleOrDefault.这么小的区别是不明显的,但是当表包含大量的列和行时,这时性能是显着的.
其他一些话
>如果用户名是主键,那么我认为SingleOrDefault和FirstOrDefault性能之间没有太大的差别,因为主键具有索引,索引列上的搜索总是比正常列快.> Single或SingleOrDefault将生成一个常规的Tsql,如“SELECT …”.> First或FirstOrDefault方法将生成Tsql语句,如“SELECT TOP 1 …”