ServiceStack Ormlite — объединения в дочерних классах

#c# #join #ormlite-servicestack #mysql.data

#c# #Присоединиться #ormlite-servicestack #mysql.data

Вопрос:

Я использую последнюю версию ServiceStack Ormlite (v4.0.23), которая предоставляет новую поддержку объединения для объединения в нескольких столбцах.

Все мои сущности наследуются от BaseEntity:

 public class BaseEntity : IBaseEntity
{
  [AutoIncrement]
  [PrimaryKey]
  public long Id { get; set; }

  public DateTime Created { get; set; }

  public DateTime Updated { get; set; }

  public DateTime? Deleted { get; set; }

  public bool IsDeleted { get; set; }
}
  

Допустим, у меня есть 2 сущности, UserEntity и AnswerEntity, которые наследуются от этого базового класса.
При использовании JoinSqlBuilder в версии 4.0.19 я мог бы объединить их, используя что-то вроде этого:

 var joinBuilder = new JoinSqlBuilder<AnswerEntity, UserEntity>();

joinBuilder = joinBuilder.Join<AnswerEntity, UserEntity>(
  l => l.UserId,
  r => r.Id,
  x => new { x.Id, x.AnswerValue, x.QuestionId, x.Created, x.Updated, x.Deleted, x.IsDeleted },
  null,
  lx => lx.IsDeleted == false,
  rx => rx.IsDeleted == false);
  

После обновления я получаю сообщение об ошибке:

MySQL.Data.MySqlClient.Исключение MySqlException: неизвестный столбец ‘BaseEntity.IsDeleted’ в предложении where’ в MySQL.Data.MySqlClient.MySqlStream.ReadPacket() в MySQL.Data.MySqlClient.NativeDriver.GetResult(Int32amp; affectedRow, Int64amp; insertedId)…

Используя новую поддержку join, я получаю ту же ошибку:

 expression.Join<AnswerEntity, UserEntity>((l, r) => l.UserId == r.Id);
expression.Where<AnswerEntity>(x => x.IsDeleted == false);
  

Ответ №1:

Теперь должно быть разрешено в этом коммите, доступном с версии 4.0.23 ServiceStack, который в настоящее время доступен в MyGet. Если у вас установлены существующие пакеты версии 4.0.23 из MyGet, их необходимо сначала удалить, чтобы можно было удалить обновленные пакеты.