在c#中映射两个类

时间:2015-09-08 13:20:39

标签: c# entity-framework automapper

我有两个班级

public class foo2
{
 public int Id;
 public string ImageLink;
 public string SalePrice
}

//var b = object of foo2
var a = new foo1{
 a.id = b.Id,
 a.image_link = b.ImageLink,
 a.sale_price = b.SalePrice
}

属性值仅因下划线和案例而异。我需要映射这两个类。

现在我正在尝试这样的事情及其工作:

io.on('connection', function (socket) {
    // somewhere else calls this function, nothing wrong here...
    function (mes) {
        console.log('New order received: ', mes);
        var doc_id = JSON.parse(mes)._id;
        request
            .get(urls['order/get'].replace(':id', doc_id))
            .end(function (err, res) {
                console.log(err);
                if (res.ok) {
                    console.log(chalk.green('OK: [GET] - ORDER/GET - ORDER_ID: ' + doc_id));
                    // The above console.log get's called, so still working...
                    socket.emit('order/new', res.body);
                    // THIS socket.emit is called randomly, it doesn't work everytime...
                } else {
                    console.log(chalk.red('ERROR: [GET] - ORDER/GET - ' + res.text))
                }
            });
    }

我听说过AutoMapper,但我不清楚我将如何使用它,或者忽略其中的案例或下划线的选项。还是有更好的解决方案吗?

2 个答案:

答案 0 :(得分:2)

您的代码很好并按预期工作。

我个人建议你使用automapper。关于为什么在互联网上有很多解释,例如:http://www.uglybugger.org/software/post/friends_dont_let_friends_use_automapper

基本上,主要问题是如果在foo1对象上重命名某个属性而不修改foo2对象,则代码将在运行时静默失败。

答案 1 :(得分:1)

正如@ ken2k的回答,我建议你不要使用对象映射器。

如果要保存代码,可以只为映射创建一个新方法(或直接在构造函数中)。

public class foo1
{
  public int id;
  public string image_link;
  public string sale_price;

  public void map(foo2 obj)
  {
    this.id = obj.Id;
    this.image_link = obj.ImageLink;
    this.sale_price = obj.SalePrice;
  }
}

然后

//var b = object of foo2
var a = new foo1();
a.map(b);