2010-09-07 2 views
1

Я не вижу много примеров того, как упорствовать с linq/flinq - я могу в конечном счете написать proc для dowhat, в котором я нуждаюсь, но соотношение 1 -> * между tableA и tableC делает это сложнее. Можете ли вы упорствовать с flinq? Есть ли какой-нибудь пример, где я мог бы следовать? Ниже я попытался (или, вернее, самый логичный вариант того, что я пробовал).Использовать fLinq для сохранения?

Заранее спасибо.

TableA (1) -> (1) TableB
TableA (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

Я не уверен, что именно вы пытаетесь достичь, и то, что выходит из строя, но в хотя бы одна часть, которая отсутствует в коде этот вызов:

db.SubmitChanges() 

В общем, типы TableA, TableB и т.д. представляют собой одну строку в базе данных и тип Table<TableA>, Table<TableB> и т.д. представляют КН ole. Так что если вы хотите добавить строку в 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.

+0

спасибо - у меня возникли проблемы с поиском этого на MSDN/web. – akaphenom

Смежные вопросы