Association References a transient object

//Association Definition
[Association([TAssociationProp.Lazy], [])]
[JoinColumn('CreatedBy', [])]
FCreatedBy : TUser;
procedure SetCreatedBy(const AValue : TUser);
Function GetCreatedBy : TUser

//Get User Function
function TDBRepo.CSGetUser(UserID: string): TUser;
begin
  DBManager := TObjectManager.Create(DBConnection);
  Result := DBManager.Find<TUser>(UserID);
  DBManager.OwnsObjects := False;
  DBManager.Free;
end;

//Function of loading the object
procedure TFrm_CSUsers.ButSaveClick(Sender: TObject);
var
  MyUser : TUser;
  CreatedBy : TUser;
begin
  CreatedBy := DBRepo.GetUser('ADMIN');
  MyUser := TUser.Create;
  MyUser.UserID := trim(EdUserID.Text);
  MyUser.UserName := trim(EdUserName.Text);
  MyUser.CreatedBy := CreatedBy;
  DBRepo.SaveUser(MyUser);
  CreatedBy.Free;
end;

I don't know your SaveUser method, but when you save TUser, the object pointed by CreatedBy property be previously in manager (either saved or loaded by it).


Thanks Wagner Landgraf, here is the corrected save function

//Save Method
procedure TDBRepo.SaveUser(AValue: TUser);
begin
  DBManager := TObjectManager.Create(DBConnection);
  DBManager.Update(AValue.CreatedBy);
  DBManager.Save(AValue);
  DBManager.Free;
end;