These answers are known to me.
However I would like to mark entity as new without creating another object.
Deep cloning is not an option because we do not want to make new complete graph, but only selected childs.
I have such a code which seems like working, however would like to ask if this code does not have some side effects on object?
public static void SetAsNew(this IEntity2 entity)
{
entity.IsDirty = true;
entity.IsNew = true;
entity.Fields.IsDirty = true;
foreach (var field in entity.Fields)
{
if (!field.IsPrimaryKey)
{
if (!field.IsNullable || (field.IsNullable && !field.IsNull))
{
field.IsChanged = true;
}
}
}
if (entity.PrimaryKeyFields.Count == 1 && entity.PrimaryKeyFields[0].DataType == typeof(Guid))
{
IEntityField2 field = entity.PrimaryKeyFields[0];
field.CurrentValue = Guid.NewGuid();
field.IsChanged = true;
}
}