gpt4 book ai didi

asp.net-mvc - 使用不带主键的查找在dbSet中查找记录

转载 作者:行者123 更新时间:2023-12-03 10:10:21 24 4
gpt4 key购买 nike

我有一个用户表:

Users:
+ID
+Username
+...

我想使用 myDBContext.Users.Find(Username)查找用户。
在当前上下文中,我无法使用他的ID。

我必须使用完整的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。如果用户不存在,则 Single将引发错误。如果找不到用户,则 SingleOrDefault将返回 null,否则将返回 User对象。

SingleOrDefaultFirstOrDefault之间选择

您可以通过使用 SingleOrDefaultFirstOrDefault获得用户对象,但是在选择使用哪种方法时,请考虑以下几点。
  • 如果存在,则两者都仅从集合/数据库中返回一个值,否则为默认值。
  • 但是,如果您有多个同名用户,并且您希望在执行LINQ查询时遇到异常,请使用SingleOrDefault,因为如果有多个元素可用,它将引发异常。
  • 如果您不希望发生异常和/或不想检查集合/数据库中是否存在重复数据,则只想从集合/数据库中获取第一个值,然后使用FirstOrDefaultSingleOrDefault进行比较即可获得更好的性能

  • FirstOrDefault
  • 通常,当我们需要从集合或数据库中获取单个值(第一个)时,将使用FirstOrDefaultFirst
  • 在First / FirstOrDefault的情况下,仅从数据库中检索一行,因此它的性能比single / SingleOrDefault好。如此小的差异几乎不会引起注意,但是当表包含大量的列和行时,此时的性能是显而易见的。

  • 其他一些说明
  • 如果username是主键,那么我认为SingleOrDefaultFirstOrDefault性能之间没有(显着)差异,因为主键具有索引,并且在索引列上的搜索将始终快于普通列。
  • SingleSingleOrDefault将生成常规的TSQL,例如“SELECT ...”。
  • FirstFirstOrDefault方法将生成TSQL语句,例如“SELECT TOP 1 ...”
  • 关于asp.net-mvc - 使用不带主键的查找在dbSet中查找记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12545565/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com