我有一个实体:
public class Account
{
public int AccountId { get; set; }
public string Mnemonic { get; set; }
public decimal NetAssetValue { get; set; }
}
在这个实体上,我有一个主键(AccountId)和助记符上的另一个唯一索引。
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
// Account
modelBuilder.Entity<Account>()
.HasKey(a => a.AccountId);
modelBuilder.Entity<Account>()
.HasIndex(a => a.Mnemonic)
.IsUnique();
}
当我将测试数据存储在XML文件中时,我不知道分配给主键的值,因此,如果要使用它,则需要通过助记符找到该记录。 我知道我可以使用LINQ:
var accountId = (from a in account
where mnemonic = "Account1"
select AccountId).First();
但是这将使用索引还是遍历整个集合。我可以有成千上万个帐户,并且每次从外部文件加载时都不想执行一次表扫描。
答案 0 :(得分:0)
提供的account
是您的DbSet<Account>
的{{1}}或从他的DbContext
派生的IQueryable<Account>
,它将使用索引查询数据库。如果要模拟Find
(在查询数据库之前已在本地跟踪的实体中检查了该实体),则可以在查询数据库之前首先检查dbContext.Set<Account>().Local
是否包含该实体。