Size: a a a

2020 July 23

VS

Vasily Shapenko in F# Chat
Так, как ты делаешь, можно ноги отстрелить
источник

ДБ

Дмитрий Башинский... in F# Chat
Vladimir Shchur
1) код там же где у тебя код ef
2) выгоднее писать сразу sql, кроме инсерта, там проще юзать dapper.contrib, но если балк инсерт, то опять же sql в зависимости от базы
dapper.contrib
умеет инсертить вложенные сущности?
а то в примерах только
Car { Id; Name }
источник

ДБ

Дмитрий Башинский... in F# Chat
вот я и прошу пример, чтоб ноги не отсреливать
источник

ДБ

Дмитрий Башинский... in F# Chat
потому что я ещё в прошлую пятницу поднимал тему, надоело писать обертки над бд, которые хаотично её меняют
источник

ДБ

Дмитрий Башинский... in F# Chat
опять таки добавить коммент через даппер было бы проще
insert с PageId и все
В случае с EF нужно страницу по Id достать, создать коммент вложить в внего страницу или наоборот коммент в страницу, а потом все сохранить
источник

ДБ

Дмитрий Башинский... in F# Chat
Vasily Shapenko
Так, как ты делаешь, можно ноги отстрелить
можно твой вариант решения?
источник

VS

Vladimir Shchur in F# Chat
Дмитрий Башинский
вот я и прошу пример, чтоб ноги не отсреливать
я вложенные делаю через вот такой хелпер
    let executeBatch connectString (commands: #seq<NpgsqlConnection -> Task<int>>) =
       task {
           use connection = new NpgsqlConnection(connectString)
           connection.Open()
           use transaction = connection.BeginTransaction()
           for command in commands do
               do! command connection |> Task.Ignore
           return! transaction.CommitAsync()
       }
команды на обе сущности - основную и вложенную передаю массивом, айдишники не автогенерируемые а гуиды
источник

Н

Николай in F# Chat
Дмитрий Башинский
опять таки добавить коммент через даппер было бы проще
insert с PageId и все
В случае с EF нужно страницу по Id достать, создать коммент вложить в внего страницу или наоборот коммент в страницу, а потом все сохранить
Если у тебя простая логика, то можно вставлять даппером с PageId. А если бизнес-логика и доменная модель сложная, и надо достать весь агрегат с его внутренней логикой, чтобы не нарушить инвариант?
источник

Н

Николай in F# Chat
Как это делают противники репозиториев и еф?
источник

ДБ

Дмитрий Башинский... in F# Chat
да
источник

ДБ

Дмитрий Башинский... in F# Chat
как они это делают
источник

ДБ

Дмитрий Башинский... in F# Chat
просто инсертить и читать не очень
к тому же хочется выделять красивый домен по с DU и примитивами
type Rating = Rating of int
type Basket =
| Empty ....
| Active ....
| Paid ...
источник

VS

Vladimir Shchur in F# Chat
Николай
Как это делают противники репозиториев и еф?
я противник агрегатов в том числе)
источник

VS

Vladimir Shchur in F# Chat
сама фраза "аггрегат с внутренней логикой" это ооп-мышление) есть данные, есть логика, не нужно их смешивать
источник

ДБ

Дмитрий Башинский... in F# Chat
ну в моем примере
есть страница в ней комменты
приходит запрос на добавление коммента, нужно проверить нет ли коммента от этого юзера и если нет то вставить коммент в страницу.

щас с EF достаю страницу вызываю page.AddCommnet(comment)
и либо падаю с доменной ошибкой либо все ок и делаю saveChanges

ты я так понимаю взял бы через даппер получил бы id юзеров которые оставили коммент, если нет текущего юзера там ты бы сделал инсерт в комменты?
источник

Н

Николай in F# Chat
Дмитрий Башинский
ну в моем примере
есть страница в ней комменты
приходит запрос на добавление коммента, нужно проверить нет ли коммента от этого юзера и если нет то вставить коммент в страницу.

щас с EF достаю страницу вызываю page.AddCommnet(comment)
и либо падаю с доменной ошибкой либо все ок и делаю saveChanges

ты я так понимаю взял бы через даппер получил бы id юзеров которые оставили коммент, если нет текущего юзера там ты бы сделал инсерт в комменты?
Я бы добавил к вопросу. Что, если вставка комментария возможна из нескольких областей приложения, а правила необходимы в каждом случае? update\insert будут выделены в какую-то функцию, в которой будет происходит эта валидация?
источник

VS

Vladimir Shchur in F# Chat
чтобы упасть достаточно сделать инсерт и если там есть ограничение по уникальности юзера и статьи, то база вернет ошибку и других запросов делать не придется
источник

ДБ

Дмитрий Башинский... in F# Chat
это уже перекладывание логики на бд
источник

ДБ

Дмитрий Башинский... in F# Chat
тут уже до хранимок не так далеко осталось
источник

VS

Vladimir Shchur in F# Chat
ну сорян) в реальной жизни ты не просто пишешь запросы, а учитываешь индексы бд
источник