1 回答
TA贡献1893条经验 获得超10个赞
一种选择是利用 Automapper 执行浅层克隆。Automapper 可以配置为忽略特定属性,例如 ID,或所有具有不可访问的设置器的属性:
因此,给定一个实体,例如:
public class SomeObject
{
public int SomeId { get; private set; }
public string Name { get; set; }
public SomeObject(int? id = null)
{
if (id.HasValue)
SomeId = id.Value;
}
}
您可以像这样配置映射器:
var mapperConfig = new MapperConfiguration(cfg =>
{
cfg.CreateMap<SomeObject, SomeObject>().IgnoreAllPropertiesWithAnInaccessibleSetter();
});
IMapper mapper = new Mapper(mapperConfig);
var test = new SomeObject(1) { Name = "Fred" }; // object we will clone.
var test2 = new SomeObject(); // example of an existing "new" object to copy values into...
mapper.Map(test, test2); // Copy values from first into 2nd..
var test3 = mapper.Map<SomeObject>(test); // Example of letting automapper create a new clone.
在这两种情况下,ID 列都没有被复制。您可能希望使用“test2”示例来利用 context.Entities.Create 为新实体创建新的跟踪代理,尽管 EF 可以很好地处理实体的新 POCO 实例,前提是将其添加到实体 DbSet。
- 1 回答
- 0 关注
- 72 浏览
添加回答
举报