📌  相关文章
📜  实体类型&#39;IdentityUserLogin<int> &#39; 需要定义一个主键.如果您打算使用无密钥实体类型调用“HasNoKey()” (1)

📅  最后修改于: 2023-12-03 15:09:26.827000             🧑  作者: Mango

Entity Framework Core - 无主键实体类型

在 Entity Framework Core 中,定义实体类型时必须指定一个主键。但是,有时候我们需要的实体类型并没有一个明显的主键属性。这时候,我们可以使用无主键的实体类型。

什么是无主键实体类型?

一个实体类型是无主键的,当它没有一个主键属性,或者多个属性组合也无法唯一地标识一个实体。

在 Entity Framework Core 中,我们可以通过调用 HasNoKey() 方法告诉 EF Core 我们的实体类型是无主键的。

如何定义无主键实体类型?

在定义实体类型时,将实体类型继承 Microsoft.AspNetCore.Identity.IdentityUserLogin<int> 类型,并且在 OnModelCreating 方法中调用 HasNoKey() 方法:

public class MyUserLogin : IdentityUserLogin<int>
{
    // ...
}

public class MyDbContext : DbContext
{
    public DbSet<MyUserLogin> MyUserLogins { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<MyUserLogin>(entity =>
        {
            entity.HasNoKey();
        });
    }
}
注意事项
  • 无主键实体类型不能进行增、删、改操作。
  • 无主键实体类型只能用于查询操作,比如 FromSqlRawQueryable 查询。
  • 无主键实体类型在查询时,必须使用 AsNoTracking() 方法。

更多关于无主键实体类型的信息可以查看 官方文档