简体   繁体   English

C#automapper核心字典<string, object>

[英]C# automapper core Dictionary<string, object>

I have a dbo table Records like: 我有一个dbo表记录,像:

CREATE TABLE records (
    key VARCHAR(100) NOT NULL,
    value_decimal DECIMAL(10, 5) NULL,    
    value_date DATETIME NULL
)

EF Core maps this table into class record like this: EF Core将此表映射为类记录,如下所示:

public class record {
    public string key {get; set;}
    public decimal? value_decimal {get; set;}
    public DateTime? value_date {get; set;}
}

And finally API returns Dictionary<string, object> like: 最后,API返回Dictionary<string, object>像:

[HttpGet]
public Dictionary<string, object> getRecords() 
{
    return this.IRepository.records.ToDictionary(
                                         d => d.key, 
                                         d => (object) new { 
                                                value_date = d.value_date,
                                                value_decimal = d.value_decimal 
                                             });
}

This works just fine, result is used in JavaScript like records["some_key"].value_decimal . 这工作得很好,结果在JavaScript中像records["some_key"].value_decimal Perfect! 完善!

Now I need [HttpPost] method which receives modified dictionary from JavaScript back and maps it to EF entity back. 现在,我需要[HttpPost]方法,该方法将从JavaScript接收修改后的字典并将其映射回EF实体。 My deepest whishes look like: 我最深的渴望看起来像:

[HttpPost]
public void saveRecords(Dictionary<string, object> payload)
{    
    var _records = this.IRepository.records.Where(w => /*some conditions*/);

    AutoMapper.Map<Dictionary<string, object>, Models.EF_Entities.record>(
                    _records, 
                    payload);

    this.IRepository.SaveChanges();
}

Has anyone done something like this? 有人做过这样的事情吗?
Thanks! 谢谢!

Thanks to * for your effort. 感谢*的努力。 Problem has been solved by a workaround: 解决方法已解决问题:

[HttpPost]
public void saveRecords(Dictionary<string, object> payload)
{    
    var _records = this.IRepository.records.Where(w => /*some conditions*/);

    foreach (var kvp in payload)
    {
        var _record = _records.Where(w => w.key == kvp.Key).FirstOrDefault();

        if (_record != null)
        {
            AutoMapper.Map(kvp.Value, _record);
        }
    }

    this.IRepository.SaveChanges();
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM