Нужна помощь ServiceStack OrmLite, как обновить таблицу с помощью таблицы с несколькими соединениями Entity Framework C#

Мне нужна помощь экспертов по сервисному стеку относительно запроса на обновление сервисного стека с объединением нескольких таблиц на С#. Я погуглил и просмотрел все связанные документы и сайт, но не смог найти достаточно подробностей относительно запроса «Обновление с присоединением».

Я хотел бы обновить таблицу One, объединив три разные таблицы и предложение where. Я пробовал все способы с помощью Entity Framework, но не смог этого сделать. Я могу сделать это с помощью Db.ExecuteSql(SqlQuery), но я хотел бы сделать это с помощью Entity Framework. Мой запрос, как показано ниже.

Я хочу обновить соединение UpdateStatus таблицы HeartRate с таблицами PatientDetails, DeviceSession, PatientSession и HeartRate, а условием where является HeartRate.timestamp = ‘@starttime’ и PatientId = ‘@PatientId’

SQLQuery =

UPDATE HeartRate  SET UpdateStatus = 1
WHERE  HeartRateID IN ( SELECT hr.HeartRateID
FROM PatientDetails pd join PatientSession ps on pd.PatientDetailsId = ps.ByPatientId
 join DeviceSession ds on  ps.PatientSessionId =  ds.ByPatientSessionId     join HeartRate hr on  ds.DeviceSessionID = hr.ByDevSessionID
 WHERE
  pd.PatientId = '@PatientId'
  AND
  hr.Timestamp = '@starttime'
  order by hr.Timestamp Asc )

Мне нужно что-то вроде ниже (это неправильно и неполное).

Db.UpdateOnly(
    new HeartRate { UpdateStatus = 1  },
    ps => new { ps.UpdateStatus  },
.SqlJoinBuilder<DeviceSession, PatientSession>((ds2, ps) => ds2.ByPatientSessionId == ps.PatientSessionId)
.Join<PatientSession, PatientDetails>((ps2, pd) => ps2.ByPatientId == pd.PatientDetailsId)
.Where<HeartRate, PatientDetails>((lthr2, pd2) => (lthr2.Timestamp == @starttime) && pd2.PatientId == PatientId)
.OrderBy(lthr2 => lthr2.Timestamp));

Пожалуйста, помогите мне.

Спасибо

Сушил


person skt    schedule 10.03.2015    source источник


Ответы (1)


//Попробуй это

var model = from v in Db.HeartRate
                  where
                  (
                      from pd in Db.PatientDetails
                      join ps in Db.PatientSession on pd.PatientDetailsId equals ps.ByPatientId
                      join ds in Db.DeviceSession on ps.PatientSessionId equals ds.ByPatientSessionId
                      join hr in Db.HeartRate on ds.DeviceSessionID equals hr.ByDevSessionID
                      where pd.PatientId == PatientId && hr.Timestamp == starttime
                      select new { HeartRateID = hr.HeartRateID }
                  ).ToList().Contains(v.HeartRateID)
                  select v;
        foreach (var item in model)
        {
            item.UpdateStatus = 1;
            Db.SaveChanges();
        }
person vicky    schedule 10.03.2015
comment
Привет, Вики, спасибо за быстрый ответ, я уже сделал это по-старому, но я хотел бы сделать это с помощью Entity Framework. - person skt; 10.03.2015
comment
Это правда. Но я хотел бы изучить структуру сущности, как показано в ссылке ниже. github.com/ServiceStack/ServiceStack.OrmLite/wiki/Release-Notes - person skt; 10.03.2015