Attachments: Copying, Moving & Renaming
Attachments can be copied, moved or renamed using appropriate built-in session methods. All of those actions are executed when SaveChanges
is called and are taking place on the server-side, removing the need to transfer whole attachment binary data over the network in order to perform the action.
Copying
Attachment can be copied using one of the session.Advanced.Attachments.Copy
methods:
Syntax
void Copy(
object sourceEntity,
string sourceName,
object destinationEntity,
string destinationName);
void Copy(
string sourceDocumentId,
string sourceName,
string destinationDocumentId,
string destinationName);
Example
var employee1 = session.Load<Employee>("employees/1-A");
var employee2 = session.Load<Employee>("employees/2-A");
session.Advanced.Attachments.Copy(employee1, "photo.jpg", employee2, "photo-copy.jpg");
session.SaveChanges();
var employee1 = await asyncSession.LoadAsync<Employee>("employees/1-A");
var employee2 = await asyncSession.LoadAsync<Employee>("employees/2-A");
asyncSession.Advanced.Attachments.Copy(employee1, "photo.jpg", employee2, "photo-copy.jpg");
await asyncSession.SaveChangesAsync();
Moving
Attachment can be moved using one of the session.Advanced.Attachments.Move
methods:
Syntax
void Move(object sourceEntity, string sourceName, object destinationEntity, string destinationName);
void Move(string sourceDocumentId, string sourceName, string destinationDocumentId, string destinationName);
Example
var employee1 = session.Load<Employee>("employees/1-A");
var employee2 = session.Load<Employee>("employees/2-A");
session.Advanced.Attachments.Move(employee1, "photo.jpg", employee2, "photo.jpg");
session.SaveChanges();
var employee1 = await asyncSession.LoadAsync<Employee>("employees/1-A");
var employee2 = await asyncSession.LoadAsync<Employee>("employees/2-A");
asyncSession.Advanced.Attachments.Move(employee1, "photo.jpg", employee2, "photo.jpg");
await asyncSession.SaveChangesAsync();
Renaming
Attachment can be renamed using one of the session.Advanced.Attachments.Rename
methods:
Syntax
void Rename(object entity, string name, string newName);
void Rename(string documentId, string name, string newName);
Example
var employee = session.Load<Employee>("employees/1-A");
session.Advanced.Attachments.Rename(employee, "photo.jpg", "photo-new.jpg");
session.SaveChanges();
var employee = await asyncSession.LoadAsync<Employee>("employees/1-A");
asyncSession.Advanced.Attachments.Rename(employee, "photo.jpg", "photo-new.jpg");
await asyncSession.SaveChangesAsync();