使用fLinq来保持?

时间:2010-09-07 13:57:10

标签: linq linq-to-sql f#

我没有看到很多关于如何坚持使用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

1 个答案:

答案 0 :(得分:0)

我不确定你究竟想要实现什么以及失败了什么,但是你的代码中至少有一部分是这个调用:

db.SubmitChanges()

通常,类型TableATableB等表示数据库中的一行,类型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