F# 在高阶函数中使用 EF 保存数据
F# Save Data with EF in High Order Function
我正在使用 F# 高阶函数创建项目并将其插入到数据库中。我一直被抛出一个异常,说我正在尝试将 0 个项目保存到我的数据库中,但我显然是在将项目添加到上下文中然后保存。检查 db.WordRelations.Local 属性 显示 728 个项目(none 其中远程存在)。
let CreateWordRelationDB () =
let db = new AnnotatorModel()
printfn "%s" "Entered Function and created db v8"
let tweets = db.Tweets.ToList() |> Seq.map(fun t -> t.Text)
let words = db.Words.ToList() |> Seq.map(fun w -> w)
words
|> Seq.fold(fun acc w1 ->
let filtacc = acc
|> Seq.filter(fun (w2:Word) ->
if(w1.Text = w2.Text) then false else true)
let adds = filtacc
|> Seq.map(fun w2 -> CreateWordRelation w1 w2 tweets)
db.WordRelations.AddRange(adds) |> ignore
try
db.SaveChanges() |> ignore
with error ->
printfn "%s" error.Message
filtacc
) words
|> ignore
db.SaveChanges() 在我身上不断失败。您可以在其上方看到 db.WordRelations.AddRange(adds)。每次迭代此数量都会减少,但从 728 开始,然后是 727,然后是 726 等等,直到 0。
有什么想法吗?
似乎出于某种原因,在我的特定实例中,SQL Azure 或 Entity Framework v6.1 不喜欢我的主键是计算列,它是通过采用第一个词和第二个词的 ID 并将它们连接在一起。
更改要调用的 ID "PairId" 并将 ID 设为 Int IDENTITY 列似乎已解决所有问题...
如果有人想对根本原因发表评论,我会非常想知道这些答案。
我正在使用 F# 高阶函数创建项目并将其插入到数据库中。我一直被抛出一个异常,说我正在尝试将 0 个项目保存到我的数据库中,但我显然是在将项目添加到上下文中然后保存。检查 db.WordRelations.Local 属性 显示 728 个项目(none 其中远程存在)。
let CreateWordRelationDB () =
let db = new AnnotatorModel()
printfn "%s" "Entered Function and created db v8"
let tweets = db.Tweets.ToList() |> Seq.map(fun t -> t.Text)
let words = db.Words.ToList() |> Seq.map(fun w -> w)
words
|> Seq.fold(fun acc w1 ->
let filtacc = acc
|> Seq.filter(fun (w2:Word) ->
if(w1.Text = w2.Text) then false else true)
let adds = filtacc
|> Seq.map(fun w2 -> CreateWordRelation w1 w2 tweets)
db.WordRelations.AddRange(adds) |> ignore
try
db.SaveChanges() |> ignore
with error ->
printfn "%s" error.Message
filtacc
) words
|> ignore
db.SaveChanges() 在我身上不断失败。您可以在其上方看到 db.WordRelations.AddRange(adds)。每次迭代此数量都会减少,但从 728 开始,然后是 727,然后是 726 等等,直到 0。
有什么想法吗?
似乎出于某种原因,在我的特定实例中,SQL Azure 或 Entity Framework v6.1 不喜欢我的主键是计算列,它是通过采用第一个词和第二个词的 ID 并将它们连接在一起。
更改要调用的 ID "PairId" 并将 ID 设为 Int IDENTITY 列似乎已解决所有问题...
如果有人想对根本原因发表评论,我会非常想知道这些答案。