Ale*_*ois 6 .net f# entity-framework
我正在寻找一个关于使用F#查询实体数据源的示例或教程.
老实说,我没有找到太多.你们有没有运气好吗?
以下是我能够根据我在此博客上找到的内容拼凑而成的示例
open Microsoft.FSharp.Linq.QuotationEvaluation
open Microsoft.FSharp.Linq
let IsPermited (serviceName:string) =
//Instantiate the Entity
let data = new BusModelContainer()
//Build your query
let services = Query.query <@ seq{ for service in data.ServiceSet do
service.Name.Equals(serviceName) && service.IsEnabled then
yield service } @>
if Seq.is_empty services then
false
else
true
Run Code Online (Sandbox Code Playgroud)
以下是博客中的代码,向我展示了如何从实体中进行选择
let db = new FSharpSampleDB(connString)
Query.query <@ seq { for c in db.Customers do
if id = c.CustomerId then
yield (new Customer(c.CustomerId, c.Name, c.Balance))}
|> Seq.hd @> :> ICustomer
Run Code Online (Sandbox Code Playgroud)
这里有大量的例子
返回记录类型
type T1 = {F1: int32; F2: string}
let q = query {
for t in ctx.SomeTable do
select { F1 = t.F1
F2 = t.F2 }
};
Run Code Online (Sandbox Code Playgroud)
返回匿名类型,{| ... |},仍然存在一些错误,丑陋的解决方法是将 .ToList() 附加到表中。
let q = query {
for t in ctx.SomeTable.ToList() do
select
{| F1 = t.F1
F2 = t.F2
|}
};
Run Code Online (Sandbox Code Playgroud)
更新 EF Core 中的记录
let obj = ctx.SomeTable.Where(fun t->t.ID = 123).Single()
obj.FieldX <- "new Value"
ctx.SaveChanges() |> ignore
Run Code Online (Sandbox Code Playgroud)