【发布时间】:2015-10-29 04:42:14
【问题描述】:
在 Dapper ORM 应用程序中,我想将一个对象分配给另一个对象,或者一次分配给所有数据成员。像这样:
public class TableA
{
public int UserId { get; set; }
public string ClientId { get; set; }
// ... more fields ...
public bool Query()
{
bool Ok = false;
try{
// Method A
TableA Rec = QueryResultRecords.First();
MyCopyRec(Rec, this); // ugly
// Method B
this = QueryResultRecords.First(); // avoids CopyRec, does not work
Ok = true;
}
catch(Exception e){
Ok = false;
}
return Ok;
}
}
使用方法A可以将.First()中的对象直接赋值给class TableA的新对象,需要自定义方法MyCopyRec来获取同一个类的数据成员中的数据。
但是,使用方法 B,您不能将同一对象直接分配给 this。
或者有其他方法吗?
【问题讨论】:
-
为什么不直接将方法设为静态并从
Query返回TableA?将数据访问方法放在这些方法正在检索的模型中也被认为是糟糕的设计。 "Separation of concerns" 告诉我们Query应该在一个单独的类中。 -
也许使用 AutoMapper?
-
@ScottChamberlain 这当然是一个选项,但我的示例代码被简化了。我的问题是是否有一个简单的方法B来编写一个类方法,将查询结果直接留在类数据成员中。
-
@DerreckDean 您是否暗示 C# 中没有简单的内置方法可以执行类似 MethodB 的操作,而这就是创建 AutoMapper 工具的原因?
-
不,没有办法将所有属性从一个对象复制到另一个内置到.Net的对象。您可以编写一个使用反射来循环和复制属性的扩展,这基本上是 AutoMapper 所做的。然而,这引出了一个问题:你的对象真的有这么多属性,而为它们写
target.Property = source.Property会很痛苦吗?反思的开销不仅仅是把你的鼻子放在磨刀石上并输入作业。我的 0.02 美元。