f#保存数据与EF在高阶函数

本文关键字:高阶 函数 EF 保存 数据 | 更新日期: 2023-09-27 18:10:18

我在f#高阶函数中创建并插入项目到数据库中。我不断抛出一个异常,说我试图保存0项到我的数据库,但我显然是添加项目到上下文中,然后保存。检查db. wordrelationships . local属性会显示728个项(没有一个是远程存在的)。

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. wordrelationships . addrange(添加)。每次迭代这个数量都会减少,但是从728开始,然后是727,然后是726,等等,直到0。

任何想法吗?

f#保存数据与EF在高阶函数

在我的特定实例中,似乎出于某种原因,SQL Azure或Entity Framework v6.1不喜欢我的主键是计算列,这是通过取单词1和单词2的ID并将它们连接在一起来计算的。

将ID更改为"PairId"并将ID更改为Int IDENTITY列似乎已经修复了所有问题…

如果有人想评论一下潜在的原因,我很想知道这些答案。