c# - .net Core EF - 按字符串名称或类型动态添加到 DbSet

标签 c# .net entity-framework .net-core entity-framework-core

假设我有一千个类都继承了一个基类,并且这些类中的每一个(不是基类)都有一个表,每个表都有相同的必需列。如何使用反射或泛型在正确的表中添加或更新行?我会在运行时知道特定实体的名称。

有一些关于使用反射获取 dbset 的 stackoverflow 帖子,但答案会导致 IQueryable,您无法向其中添加新项目。那些海报似乎对此很满意,因为我想他们只是在获取数据。我需要一个 DbSet 以便我可以添加和更新。我可以获得完全限定的实体名称和类型,但是如何获得 DbSet 呢?我不想写一个 1000 行的 switch 语句:(

最佳答案

我最终使用魔术字符串添加了所有我知道会出现在基类中的属性。虽然不理想,但它确实添加到正确的表中,这是最终目标。

            var entityType = Assembly.GetAssembly(typeof(BaseTypeEntity)).GetType(namespacePrefix + typeName);

            // create an instance of that type
            object instance = Activator.CreateInstance(entityType);

            // Get a property on the type that is stored in the 
            // property string
            PropertyInfo prop = entityType.GetProperty("Active");
            prop.SetValue(instance, true, null);
            // .... more properties

            _context.Add(instance);

关于c# - .net Core EF - 按字符串名称或类型动态添加到 DbSet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58209807/

相关文章:

C# 在未知对象中设置属性

c# - 表达式树重用值?

c# - 属性和变量有什​​么区别

c# - Entity Framework 异常 : Invalid object name

c# - C#中如何比较日期

c# - 队列的线程安全处理

c# - 在 C# 中,如何更改不可继承的类中属性的 DefaultValue 属性?

c# - 在 C# 中使文件可写的最佳方法

c# - 使用 ASP.NET Identity 忽略 UserName 属性

entity-framework - 为什么从dbContext获取ObjectContext的过程这么慢?