
Anton
31.05.2017
09:19:03
спасибо что отвечается на нубские вопросы
Я просто скачал с нугета пакет и всё...

Vasily
31.05.2017
09:20:28
Это не тот провайдер

Google

Friedrich
31.05.2017
09:21:10

Vasily
31.05.2017
09:21:27
Это из FSharp.data

Anton
31.05.2017
09:21:36

Friedrich
31.05.2017
09:21:42
У него DLL именно так называется, я только что скачал с нугета и проверил :)

Vasily
31.05.2017
09:22:12
А, тогда версия фреймворка не та

Friedrich
31.05.2017
09:22:16
Бахни 4.5.1

Vasily
31.05.2017
09:22:23
Лучше 4.6.1

Anton
31.05.2017
09:23:18
ок
собралось и подключилось
буду разбираться, как подключиться к базе

Vasily
31.05.2017
09:26:21
connection string в помощь

Anton
31.05.2017
09:39:47
я не могу понять - оно подключилось или нет. По крайне мере моих таблиц там почему-то нет, в интеллисенсе.

Google

Vasily
31.05.2017
09:40:03
База та?

Anton
31.05.2017
09:40:32
да
код собирается, ничего не ругается
ха, вот поменял ip ради интереса - сразу на билде ругнулось... Хорошо, значит куда-то оно всё же подключается.

Vasily
31.05.2017
09:42:45
Ну я с mysql не работал
Поэтому ничего не могу сказать
C mssql разбирался, почему таблицы не видит
Но это чисто ms фишка

Anton
31.05.2017
09:43:36
хм
Убрал owner'а и заработало :D
@nevoroman а можно теперь получить типы каждой таблицы и на их осново создавать записи ?
Что бы вручную не создавать эти энтити

Vasily
31.05.2017
09:52:35
Там же все в документации есть

Anton
31.05.2017
09:52:44
нууу, они там пишут типы руками...
разве тайп провайдер не должен их генерировать на ходу?

Vasily
31.05.2017
09:53:20
Не вижу, где они там руками пишут

Anton
31.05.2017
09:53:25
https://fsprojects.github.io/SQLProvider/core/crud.html
type Employee = {
FirstName:string
LastName:string
}

Vasily
31.05.2017
09:53:39
Вот прям в начале читаю

Anton
31.05.2017
09:53:49
там про вставку листа

Google

Anton
31.05.2017
09:53:54
insert a list of records:

Vasily
31.05.2017
09:53:55
let row = orders.Create()
И читаем внимательнее
mvps1
|> List.map (fun x ->
let row = employees.Create()
row.FirstName <- x.FirstName
row.LastName <- x.LastName)
ctx.SubmitUpdates()
Рекорды тут типа dto

Anton
31.05.2017
09:55:17
хммм

Vasily
31.05.2017
09:55:23
Энтити уже все созданы
Or directly specify the fields:
И ниже
Все ок там

Anton
31.05.2017
09:56:23
т.е я просто вызываю 1 раз Create() и после могу в мапе жахнуть то что от туда мне пришло? Удобно.

Vasily
31.05.2017
09:56:48
Не, на каждый dto надо Create вызвать

Anton
31.05.2017
09:57:28
хотя не, они тут всетаки используют тип самописный и на его основе создают лист
type Employee = {
FirstName:string
LastName:string
}
let mvps1 = [
{FirstName="Andrew"; LastName="Kennedy"};
{FirstName="Mads"; LastName="Torgersen"};
{FirstName="Martin";LastName="Odersky"};
]
хм, что-то я не понял...

Vasily
31.05.2017
09:58:03
У тебя есть dto, есть entity
dto они создают руками
entity через Create
потом мапят

Anton
31.05.2017
09:58:35
ну да, вижу вот такую конструкцию
mvps2
|> List.map (fun x ->
employees.Create(x.FirstName, x.LastName)
)

Vasily
31.05.2017
09:59:05
Ну и что в ней непонятно?

Google

Anton
31.05.2017
09:59:06
Меня смущает, что типы создают ручками
type Employee = {
FirstName:string
LastName:string
}

Vasily
31.05.2017
09:59:11
Это dto
Внешние данные
Они никогда не создаются автоматом

Anton
31.05.2017
09:59:38
а dto можно получить автоматом через тайп-провайдер ? =)

Vasily
31.05.2017
09:59:46
Нельзя

Anton
31.05.2017
09:59:48
если у меня к примеру 1 в 1 св-ва

Friedrich
31.05.2017
09:59:57
Можно вообще без DTO, если тебе не нужно DTO.

Vasily
31.05.2017
09:59:58
Он Erased
Ну или можно без dto
Но dto - это контракт, пойми

Anton
31.05.2017
10:00:21
@fvnever смотри, мне нужно сгенерить 10000 юзеров =)

Vasily
31.05.2017
10:00:36
Рассматривай dto как правило генерации

Anton
31.05.2017
10:00:39
и к ним файлов эдак на 2-4 гига

Friedrich
31.05.2017
10:01:50

Anton
31.05.2017
10:02:13
у меня даже не тренировочная - а тестовая

Vasily
31.05.2017
10:02:33
Я тогда вопроса не понял

Anton
31.05.2017
10:02:36
мне базу нужно заполнить и придумать, как делать систему бекапов, что бы не лочить всю БД в этот момент

Vasily
31.05.2017
10:02:46
Ну заполняй
Что мешает-то?

Google

Anton
31.05.2017
10:02:51
F# просто как инструмент =)

Vasily
31.05.2017
10:02:56
Create есть

Anton
31.05.2017
10:02:59
угу
сейчас буду

Vasily
31.05.2017
10:03:10
Как внешние данные запихнуть, сообразишь, думаю

Anton
31.05.2017
10:03:15
угу
там на сайте есть
единственное, я в печали, что нету интерполяции строк.

Vasily
31.05.2017
10:03:55
Тебе зачем?
Есть sprintf

Anton
31.05.2017
10:04:36
я хотел жахнуть типо так [0..1000] |> List.Map (fun i -> db.Users.Create("User_{i}") )

Vasily
31.05.2017
10:05:12
[0.1000] |> List.Map (fun i -> db.Users.Create(sprintf "User_%d" i) )

Friedrich
31.05.2017
10:05:25
+

Vasily
31.05.2017
10:05:48
Точнее так

Friedrich
31.05.2017
10:05:55
Это самую малость печалит, но не так критично, как в C#. Потому, что синтаксис для sprintf проверяется во время компиляции.

Vasily
31.05.2017
10:06:16
i|>sprintf "User_%d"|>db.Users.Create

Anton
31.05.2017
10:06:23
Vasily пасибо

Vasily
31.05.2017
10:06:30
Пжлст
Это я ща прокрастинирую
Верстая сраный WebForms

Anton
31.05.2017
10:07:13
стоп, я не понял i|>sprintf "User_%d"|>db.Users.Create
это после map ?