我必须复制一个实体但不复制其ID,然后将新实体视为一个单独的对象。 无法访问我的实体ID的set访问器。因此,我无法修改Id并将其设置为null,现在只允许在数据库中执行AddOrUpdate(基于Id)。 我无法执行简单的添加。 我需要能够复制或克隆不同的实体,所以也许通用函数可以帮助我做到这一点,但是我从何处着迷。 有帮助吗??
答案 0 :(得分:1)
一种选择是利用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在将实体添加到Entities DbSet中的情况下,可以很好地与实体的新POCO实例配合使用。 / p>