.net - 使用同一张表的 Dapper.NET 组合

标签 .net orm dapper composition

我有一个表,但我想将它映射为两个类之间的组合。

假设我有一个包含以下字段的客户表:Id、Name、ExtraDataValue、ExtraDataDate。

class Customer
{
  public int Id {get;set;}
  public string Name {get;set;}
  public ExtraData Extra {get;set;}
}

class ExtraData
{
  public int Value {get;set;}
  public DateTime Date {get;set;}
}

查询它并在 Customer 对象中填充 ExtraData 的最佳方法是什么?

编辑:

我会将问题扩展到更复杂的场景,因为 XenoPuTtSs 的答案解决了第一个问题,但不适用于这个问题。

假设现在我有一个地址表的连接。 splitOn 选项将拆分结果以创建 ExtraData 但无法拆分以创建地址。

我看到另一个使用 splitOn 的问题。我们不能安全地使用 Select *,因为如果我们更改包含更多字段的表,我们必须始终记住将拆分字段移到底部。或者我们将始终必须在 Select 命令中以安全顺序描述所有字段。

最佳答案

我只是自己查了一下。这是我想出的,更改为您的场景。

class Customer
{
  public int Id {get;set;}
  public int Name {get;set;}
  public ExtraData Extra {get;set;}
}

class ExtraData
{
  public int Value {get;set;}
  public int Date {get;set;}
}

using (var conn = DatabaseService.CreateConnection())
{
    var t = conn.Query<Customer, ExtraData, Customer>(@"
    select 
        cust_num as Id,
        cust_name as Name,
        ex_data1 as Value,
        ex_date as Date
    from Customer
    ",
     (cust, extra) =>
     {
         cust.Extra = extra;
         return cust;
     },
    splitOn: "Value");
    return t;
}

关于.net - 使用同一张表的 Dapper.NET 组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29612741/

相关文章:

entity-framework - Symfony:如何验证主义实体映射一致性

orm - Laravel 4 Eloquent ORM : virtual tables/views - is it possible?

oracle - 当我运行带有参数的查询或命令时,为什么 Dapper 会抛出 OracleException?

f# - Dapper F# - A Parameterless default 一个无参数的默认构造函数或一个匹配的签名

.net - Windows 播放音频的准确度(就时间而言)如何?

.net - 在一个租户中创建多个企业应用程序注册到同一 Web 应用程序

c# - 在 c#.net 中使用字符串

c# - DrawingContext到位图文件

python - 科学模拟数据的数据持久化,Mongodb + HDF5?

c# - Npgsql 3.0.0 解析枚举类型失败