2010-09-07 34 views
1

我沒有看到很多關於如何堅持使用linq/flinq的例子,我最終可能會寫一個proc來處理我需要的,然而tableA和tableC之間的1 - > *關係使得這個技巧變得棘手。你能堅持flinq嗎?有什麼地方可以刊登我可以遵循的例子嗎?以下是我所嘗試過的(或者說我所嘗試的最合乎邏輯的變體)。使用fLinq來保存?

預先感謝您。

表A(1) - >(1)表B
表A(1) - >(*)表C

// 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

我不知道你想實現什麼,什麼會失敗,但在至少一條是從你的代碼缺少的是這一呼籲:

db.SubmitChanges() 

一般來說,類型TableATableB等代表數據庫中的一行,並鍵入Table<TableA>Table<TableB>等代表WH ole數據庫。所以,如果你想將一行添加到數據庫表A,你沿着

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

+0

謝謝 - 我在MSDN/web上找到這個問題。 – akaphenom 2010-09-08 16:10:44