@Inject
 public DisBoardsLocalRepoImpl(DaoSession daoSession) {
   this.daoSession = daoSession;
   this.boardPostDao = daoSession.getBoardPostDao();
   this.boardPostListDao = daoSession.getBoardPostListDao();
   this.boardPostCommentDao = daoSession.getBoardPostCommentDao();
   this.boardPostSummaryDao = daoSession.getBoardPostSummaryDao();
 }
  @Override
  public void setBoardPost(final BoardPost boardPost) throws Exception {
    AssertUtils.checkMainThread();
    daoSession.callInTx(
        new Callable<Boolean>() {
          @Override
          public Boolean call() throws Exception {
            if (boardPost != null) {
              // Horrible we want to keep this local value
              BoardPost existingBoardPost = boardPostDao.load(boardPost.getBoardPostID());
              if (existingBoardPost != null) {
                boardPost.setNumberOfTimesOpened(existingBoardPost.getNumberOfTimesOpened());
              }

              boardPostDao.insertOrReplace(boardPost);
              List<BoardPostComment> boardPostComments = boardPost.getComments();
              boardPostCommentDao.insertOrReplaceInTx(boardPostComments);
            }
            return true;
          }
        });
  }