Size: a a a

2020 March 18

E

EgorBo in pro.net
вряд ли
источник

B

Bretbas in pro.net
я попробую.
но если нет, то как по другому?
источник

VL

Vova Lantsov in pro.net
Bretbas
я попробую.
но если нет, то как по другому?
написать raw sql запрос
источник

B

Bretbas in pro.net
Vova Lantsov
написать raw sql запрос
это всегда успеется)
источник

AB

Alex B in pro.net
А выбрать отсутствующие небось для вставки в БД нужно?)
источник

B

Bretbas in pro.net
Alex B
А выбрать отсутствующие небось для вставки в БД нужно?)
ага
источник

B

Bretbas in pro.net
EgorBo
начни с обычного .Join()
так а че он мне даст то? Мне объединение то не нужно совсем.
Мне просто нужно каким-то образом сделать Except над appContent.HashTags и моей коллекцией, с учетом того, что сравнение будет не по primary key
источник

DP

Denis Petukhov in pro.net
Bretbas
а то я тут выдумываю:
      var existsHashTags = await appContext.HashTags
       .Where(x => postWriteModel.HashTags.Contains(x.Name))
       .ToListAsync();
     var addedHashTags = postWriteModel.HashTags
       .Except(existsHashTags.Select(x => x.Name))
       .Select(x => new HashTag() { Name = x });
Зачем select в конце?
источник

AB

Alex B in pro.net
Кажется, что нужен всё же merge. И мб это проще запросом написать. Но, в целом, 100% можно обойтись запросами типа запроса выше и не экономить. Потому что сначала один запрос чтобы выбрать то, чего нет. Потом еще один запрос, которые будет вставлять новое и нужны гарантии, что вставку параллельный запрос уже не сделал.
источник

B

Bretbas in pro.net
EgorBo
чото типа

select * from table where tag in (tag1, tag2, tag3 ... )
это формирует:
      var existsHashTags = await appContext.HashTags
       .Where(x => postWriteModel.HashTags.Contains(x.Name))
       .ToListAsync();
источник

B

Bretbas in pro.net
так что все норм
источник

B

Bretbas in pro.net
Alex B
Кажется, что нужен всё же merge. И мб это проще запросом написать. Но, в целом, 100% можно обойтись запросами типа запроса выше и не экономить. Потому что сначала один запрос чтобы выбрать то, чего нет. Потом еще один запрос, которые будет вставлять новое и нужны гарантии, что вставку параллельный запрос уже не сделал.
транзакция
источник

B

Bretbas in pro.net
Denis Petukhov
Зачем select в конце?
чтобы к типу привести?
источник

DP

Denis Petukhov in pro.net
Bretbas
чтобы к типу привести?
Зочем, там и так хэштэг
источник

B

Bretbas in pro.net
Denis Petukhov
Зочем, там и так хэштэг
нет, там string
источник

B

Bretbas in pro.net
Denis Petukhov
Зочем, там и так хэштэг
      var addedHashTags = postWriteModel.HashTags
       .Except(existsHashTags.Select(x => x.Name))
       .Select(x => new HashTag() { Name = x });


`
postWriteModel.HashTags
<— тут IList<string>
источник

DP

Denis Petukhov in pro.net
Ну ок
источник

DP

Denis Petukhov in pro.net
Bretbas
транзакция
Ну и што транзакция. Смотря какой уровень изоляции.
источник

B

Bretbas in pro.net
Denis Petukhov
Ну и што транзакция. Смотря какой уровень изоляции.
в любом случае EF делает транзакцию сам
источник

B

Bretbas in pro.net
иначе если кто-то все таки и сделал вставку параллельно, то ПОСТ не обновится, как и не добавятся новые хеш теги
источник