首页 > 解决方案 > 如何找到通用实体类型并在实体框架模型构建器中应用?

问题描述

我有一个代表数据库视图的界面。

public interface IView { }

我想使用modelbilder来设置HasNoKey()方法。

 public class DataContext : DbContext
 {       
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<IView>(buildAction =>
        {
            buildAction.HasNoKey();
        });


        base.OnModelCreating(modelBuilder);
    }
 }

但这会引发异常。我可以使用反射来实现它还是在实体框架核心中有任何解决方案?

标签: entity-frameworkentity-framework-core

解决方案


您可以在 OnModelCreating 中迭代所有模型类型。像这样:

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        foreach (var t in modelBuilder.Model.GetEntityTypes().Where( t => typeof(IView).IsAssignableFrom(t.ClrType)))
        {
            t.IsKeyless = true;
        }
        base.OnModelCreating(modelBuilder);
    }

推荐阅读