首页 > 解决方案 > SqlException:对象名无效,对象在运行时创建

问题描述

我有一个在运行时创建的名为“dbSet”的动态对象,我认为它包含一个 DbSet

dynamic dbSet = context.RegisterType(GenericPOCO);

我使用以下代码创建 DbSet 对象

internal object RegisterType<T>(T genericPOCO) where T: class
    {
        var m = this.GetType().GetMethod("Set");
        var generic = m.MakeGenericMethod(genericPOCO.GetType());

        var result = generic.Invoke(this, null);

        return result;
    }

之后,我尝试在下一行创建一个可查询的对象:

var item = await EntityFrameworkQueryableExtensions.FirstOrDefaultAsync(dbSet);

在最后一行我收到下一条消息

SQLException: 无效的对象名称 'TestGatito'

'TestGatito' 是在运行时创建的动态对象的类型,这个名称可以是可变的,所以我不能在模型中注册对象

标签: c#ef-core-2.0

解决方案


我终于可以解决问题了

我必须创建一个新上下文来注册新对象,新上下文与主上下文相同,所以在下一个上下文中我可以添加新实体并应用反射来调用 DbContext 的所有方法,如“FirstOrDefault、Find、List 等'


推荐阅读