這裏我再次尋求幫助。 :) 我試圖插入數據到我的MySQL數據庫使用F#。 我的模式包括3個表(實驗,基因及其結果):在所有表中的MySQL數據庫中插入數據
Experiments | Results | Gene
Experiment id | Experiment id | Gene id
Experiment name | Gene id | Gene Name
| Value |
現在,我試圖將數據添加到使用sqlProvider的分貝。
let db = sql.GetDataContext()
let gene_tb = db.Vp32.Genes
let exp_tb = db.Vp32.Experiments
let results_tb = db.Vp32.Results
let createNewInput (genename: string) (expname: string) res =
let newRes = results_tb.Create()
let newGene = gene_tb.Create()
let newExp = exp_tb.Create()
newGene.GeneName <- genename
newExp.ExpName <- expname
newRes.ResultVal <- Some res
createNewInput "test1" "experiment_test1" (float32 999.5)
db.SubmitUpdates()
我有問題,使其明白結果值鏈接到實驗和基因IDS。當我嘗試提交時出錯: 「字段'Exp_id'沒有默認值」。那麼,沒有默認值,因爲它應該是其他表的ID。哦,並且..這些ID設置爲自動增加。此外,每次添加新數據時,如果實驗名稱已存在於表中,則不應增加該ID。我是否必須使用'if ... then'來爲此或某些規範代碼做'觸發器'?
非常感謝您提前! :D 感謝你我已經學會了很多阿爾雷,我不敢相信!^-^
解決方案:所以,我發現問題是我必須查詢實驗和基因的ID ..所以我改變了一些東西。現在我有3個功能(每個表)和一個結果將結果值之前做一個小的查詢:
let addNewExp (expname: string)=
let newExp = exp_tb.Create()
newExp.ExpName <- expname
db.SubmitUpdates()
let addNewGene (genename: string)=
let newGene = gene_tb.Create()
newGene.GeneName <- genename
db.SubmitUpdates()
let addNewRes (expName: string) (geneName: string) res =
let tempExpId =
query {
for experiment in exp_tb do
where (experiment.ExpName = expName)
select experiment.ExpId
}
|> Seq.head
let tempGeneId =
query {
for gene in gene_tb do
where (gene.GeneName = geneName)
select gene.GeneName
}
|> Seq.toArray |> String.concat ""
let newRes = results_tb.Create()
newRes.ExpId <- tempExpId
newRes.GeneId <- tempGeneId
newRes.ResultVal <- Some res
db.SubmitUpdates()
事實上,這是必做的查詢增加一些之前得到的ID值在關聯表(結果)中。之後,我只是轉換爲正確的類型(在數據庫中描述),因爲查詢返回爲序列(Seq)。 我希望這可以幫助未來的人。
好吧,謝謝你分享你的想法! :)我試圖去這種方式,但現在我得到「未更改的實體遇到更新列表 - 這應該是不可能的!」。 >。< –
@IsabellaNavarro聽起來不太好!你可以編輯你的問題,幷包括更新的代碼? –