我没有看到很多关于如何坚持使用linq / flinq的例子 - 我最终可能会写一个proc我需要它,但是tableA和tableC之间的1> *关系使得这很棘手。你能坚持用flinq吗?在我可以遵循的地方发布了一个例子吗?以下是我的尝试(或者更确切地说,我尝试过的最合乎逻辑的变体)。
提前谢谢。
表A(1) - > (1)表B
表A(1) - > (*)TableC
// add the report
let b = TableB()
b.Name <- getName()
// add the authors
let authorSet = Data.Linq.EntitySet<TableC>()
getAuthorIds document.Authors |> Seq.iter
(fun id ->
let c = TableC()
c.Id <- id
authorSet.Add c)
// add the tagged report w/ associated reoprt
let a = TableA()
a.field1 <- "Something"
a.tableB = b
a.TableC <- authorSet
let docSet = Data.Linq.EntitySet<TableA>()
docSet.Add doc
db.TableA.InsertAllOnSubmit([doc])
let cf = db.ChangeConflicts
let cm = db.GetChangeSet
答案 0 :(得分:0)
我不确定你究竟想要实现什么以及失败了什么,但是你的代码中至少有一部分是这个调用:
db.SubmitChanges()
通常,类型TableA
,TableB
等表示数据库中的一行,类型Table<TableA>
,Table<TableB>
等表示整个数据库。因此,如果要向数据库TableA添加行,则可以执行
let rowA = TableA(Name = "Foo", Salary = 42)
db.TableA.InsertOnSubmit(rowA)
db.SubmitChanges()
在进行SubmitChanges之前,您当然可以在对象模型中进行更多更改(即您可以且必须以1:1的关系添加所有相关的外键实体)。
此处没有太多的F#特定 - MSDN是有关此信息的绝佳来源,请参阅例如http://msdn.microsoft.com/en-us/library/bb386941.aspx