在EF Core的派生
DbContext
中,在OnModelCreating(ModelBuilder modelBuilder)
方法中,我可以通过调用modelBuilder.Model.GetEntityTypes()
获取模型中定义的所有实体类型。
我的问题是我的一些实体具有复杂类型的属性,即属性类型是类而不是字符串或数字。属性定义中使用的那些类也成为模型中定义的实体,并由
modelBuilder.Model.GetEntityTypes()
返回。我怎样才能只得到对应于数据库表的实体?
重现步骤:
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="7.0.4" />
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="7.0.3" />
Program.cs
的内容替换为以下内容:using System.Linq;
using Microsoft.EntityFrameworkCore;
public class Program
{
public static void Main(string[] args)
{
DbContextOptions<MyDbContext> options = new DbContextOptionsBuilder<MyDbContext>().UseNpgsql().Options;
MyDbContext myDbContext = new(options);
myDbContext.Database.EnsureCreated();
}
}
public class MyDbContext : DbContext
{
public DbSet<MyEntity> MyEntities { get; private set; }
public MyDbContext(DbContextOptions<MyDbContext> options) : base(options)
{
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<MyEntity>().Property(e => e.StoreAsJson).HasColumnType("jsonb");
var entityTypes = modelBuilder.Model.GetEntityTypes().Where(et => !et.IsOwned()).ToList();
}
}
public class MyEntity
{
public string Id { get; set; }
public StoreAsJson StoreAsJson { get; set; }
}
public class StoreAsJson
{
public string Id { get; set; }
public string Value { get; set; }
}
var entityTypes = modelBuilder.Model.GetEntityTypes().Where(et => !et.IsOwned()).ToList();
entityTypes
包含多少个实体。