如何在没有主键的情况下在实体框架中查找记录

时间:2018-09-23 14:25:05

标签: entity-framework-core

我有一个实体:

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();

但是这将使用索引还是遍历整个集合。我可以有成千上万个帐户,并且每次从外部文件加载时都不想执行一次表扫描。

1 个答案:

答案 0 :(得分:0)

提供的account是您的DbSet<Account>的{​​{1}}或从他的DbContext派生的IQueryable<Account>,它将使用索引查询数据库。如果要模拟Find(在查询数据库之前已在本地跟踪的实体中检查了该实体),则可以在查询数据库之前首先检查dbContext.Set<Account>().Local是否包含该实体。