Scope — F#
Examples/Scope/FSharp/CreateDepartment.fs
use! fusionConnection = context.OpenFusionConnectionAsync()
let departmentDto =
{
Id = 1111L
Name = "Computer Science"
Budget = 250_000m
Courses =
[
{ Id = 101L; Title = "Introduction to Programming"; Credits = 5 }
{ Id = 102L; Title = "Algorithms and Data Structures"; Credits = 6 }
{ Id = 103L; Title = "Database Systems"; Credits = 5 }
{ Id = 104L; Title = "Operating Systems"; Credits = 4 }
]
}
let scope = fusionConnection.CreateScope()
scope.Table<Department>().Insert([
{
DepartmentID = departmentDto.Id
Name = departmentDto.Name
Budget = departmentDto.Budget
}
])
|> ignore
departmentDto.Courses
|> List.map (fun courseDto ->
{
CourseID = courseDto.Id
Title = courseDto.Title
Credits = courseDto.Credits
DepartmentID = departmentDto.Id
})
|> scope.Table<Course>().Insert
|> ignore
let! result = scope.FlushAsync()
return box result
Examples/Scope/FSharp/ModifyDepartment.fs
use! fusionConnection = context.OpenFusionConnectionAsync()
let parameters = Parameters()
parameters.Add("DepartmentID", 1111L)
let! existingDepartment =
fusionConnection.GetDataNodesAsync(
"""
SELECT *
FROM Department D
LEFT JOIN Course C ON D.DepartmentID = C.DepartmentID
WHERE D.DepartmentId = @DepartmentID
ORDER BY D.Name;
""",
From<Department>(Join<Course>()),
parameters)
let incomingDepartmentDto =
{
Id = 1111L
Name = "Computer Science and Engineering"
Budget = 300_000m
Courses =
[
{ Id = 101L; Title = "Introduction to Programming"; Credits = 5 }
{ Id = 102L; Title = "Advanced Algorithms and Data Structures"; Credits = 7 }
{ Id = 104L; Title = "Operating Systems"; Credits = 4 }
{ Id = 0L; Title = "Distributed Systems"; Credits = 5 }
]
}
let scope = fusionConnection.CreateScope<Department>(existingDepartment)
scope.Table<Department>().Merge([
{
DepartmentID = incomingDepartmentDto.Id
Name = incomingDepartmentDto.Name
Budget = incomingDepartmentDto.Budget
}
])
|> ignore
incomingDepartmentDto.Courses
|> List.map (fun courseDto ->
{
CourseID = courseDto.Id
Title = courseDto.Title
Credits = courseDto.Credits
DepartmentID = incomingDepartmentDto.Id
})
|> scope.Table<Course>().Merge
|> ignore
let! result = scope.FlushAsync()
return box result
Examples/Scope/FSharp/RemoveDepartment.fs
use! fusionConnection = context.OpenFusionConnectionAsync()
let parameters = Parameters()
parameters.Add("DepartmentID", 1111L)
let! existingDepartment =
fusionConnection.GetDataNodesAsync(
"""
SELECT *
FROM Department D
LEFT JOIN Course C ON D.DepartmentID = C.DepartmentID
WHERE D.DepartmentId = @DepartmentID
ORDER BY D.Name;
""",
From<Department>(Join<Course>()),
parameters)
let scope = fusionConnection.CreateScope<Department>(existingDepartment)
scope.Table<Department>().Delete() |> ignore
scope.Table<Course>().Delete() |> ignore
let! result = scope.FlushAsync()
return box result