相关疑难解决方法(0)

我可以从Dapper查询返回多个派生类型的集合

我有一个类似于这样的类结构:

public abstract class Device
{
    public int DeviceId { get; set; }
    //Additional Properties
}

public class DeviceA : Device
{
    //Specific Behaviour
}

public class DeviceB : Device
{
    //Specific Behaviour
}
Run Code Online (Sandbox Code Playgroud)

我需要检索设备列表,或者单个设备,它被实例化为适当的派生类型(基于DB中设备记录中的类型值).也就是说,Device对象集合应该包含许多具有不同类型的对象,所有这些对象都是从中派生出来的Device.

我已经通过以下方式实现了这一点,但是对它感觉不对.

public static IEnumerable<Device> AllDevices()
{
    using (var connection = CreateConnection())
    {
        connection.Open();
        return connection.Query<dynamic>("SELECT * FROM Device").Select<dynamic, Device>(d =>
            {
                Device device = null;
                if (d.DeviceTypeID == 1)
                    device = new DeviceA();
                else if (d.DeviceTypeID == 2)
                    device = new …
Run Code Online (Sandbox Code Playgroud)

c# inheritance subclass dapper

13
推荐指数
1
解决办法
2208
查看次数

如何在 EF Core 中自动映射 TPH 派生类?

默认情况下,EF6 将为每个层次结构表 (TPH) 映射一个基本抽象类及其派生类。

EF Core 不再遵循此逻辑,并要求选择派生类。文档指出:

按照约定,上​​下文中的 DbSet 属性中公开的类型将作为实体包含在模型中。还包括 OnModelCreating 方法中指定的实体类型,以及通过递归探索其他已发现实体类型的导航属性找到的任何类型。

如果您有一些子类型,那么使用这种方法并不难,因为您可以将它们添加为 DbSet,或者为每个子类型添加 HasDiscriminator().HasValue() ,映射如下:

builder.HasDiscriminator()
    .HasValue<CommaSymbolRule>("CommaSymbolRule")
    .HasValue<DashSymbolRule>("DashSymbolRule")
    .HasValue<IsNumericSymbolRule>("IsNumericSymbolRule")
    .HasValue<IsPunctuationSymbolRule>("IsPunctuationSymbolRule")
    .HasValue<PeriodSymbolRule>("PeriodSymbolRule")
Run Code Online (Sandbox Code Playgroud)

在某些情况下,这是次优的,因为您可能有许多派生类。就我而言,我有一个规则引擎,并且不想单独映射每个规则。

有没有办法在 EF Core Table Per Hierarchy 场景中自动映射基类的子类型,而无需手动添加它们?

c# entity-framework discriminator entity-framework-core .net-core

4
推荐指数
1
解决办法
1387
查看次数

将IDictionary <string,object>转换为class

我有个问题.如何转换IDictionary<string, object>为课程?以及创建用户帐户.

WebSecurity.CreateUserAndAccount(UserName, Password, new { eny = 0 , eny2 = "sas"});
Run Code Online (Sandbox Code Playgroud)

我有

void Create(String name, IDictionary<string, object> values)) {...}
Run Code Online (Sandbox Code Playgroud)

和班级

 class test {
    String name,
    int eny,
    int eny2
  }
Run Code Online (Sandbox Code Playgroud)

我想用字典中的数据进行对象测试.

.net c# asp.net-mvc

-3
推荐指数
1
解决办法
1万
查看次数