I have a situation when I cant just update original record in database, but instead make a new record, copy all fields from old and apply changes to new one. (something like
Is it possible to make it work without manually copying every field?
Yes - don't manually copy every field:
You could use AutoMapper.
Set up somewhere (called once at program start):
AutoMapper.Mapper.CreateMap()
// don't map the id to stop conflicts when adding into db
.ForMember(a => a.Id, a => a.Ignore());
Then call:
var newObject = AutoMapper.Mapper.Map(oldObject);