我有errr有一個可操作的wpf應用程序來操縱數據庫信息(首先使用Entity Framework,數據庫)。在Entity Framework中創建新實體時違反唯一約束條件
數據的結構的金融信息4個表(所有1:1映射到5的主表),與一對夫婦查找表的與主表的外鍵參考文獻SQLServer中:(1映射到主表中的另一1),然後「從數據庫更新模型......」跑到嚮導將新表添加到模型
我添加了一個表。 .edmx文件中的所有內容都可以正常使用,包括'0..1'關係鏈接。
然而,當我試圖挽救,我收到一個錯誤「唯一約束違反」。
我的創作代碼:
private void AddNewStatementsQuery(LGFinanceEntities lGFinanceEntities)
{
StatementsMain newStatement = StatementsMain.CreateStatementsMain(9999, this.LocalGovt.StakeholderID, 161, this.Year.FinancialYearID);
StatementsIncome newInc = StatementsIncome.CreateStatementsIncome(newStatement.StatementsMainID);
StatementsNote newNote = StatementsNote.CreateStatementsNote(newStatement.StatementsMainID);
StatementsRSSFinPos newRSSFinPos = StatementsRSSFinPos.CreateStatementsRSSFinPos(newStatement.StatementsMainID);
StatementsSurplusDeficit newSurplusDeficit = StatementsSurplusDeficit.CreateStatementsSurplusDeficit(newStatement.StatementsMainID);
lGFinanceEntities.StatementsMains.Context.AddObject("StatementsMains", newStatement);
lGFinanceEntities.StatementsMains.Context.AddObject("StatementsIncomes", newInc);
lGFinanceEntities.StatementsMains.Context.AddObject("StatementsNotes", newNote);
lGFinanceEntities.StatementsMains.Context.AddObject("StatementsRSSFinPos", newRSSFinPos);
lGFinanceEntities.StatementsMains.Context.AddObject("StatementsSurplusDeficit", newSurplusDeficit);
if (lGFinanceEntities.SaveChanges() != 1) // this is causing the exception
{
MessageBox.Show("Error. New Statements not created", "Database Error");
}
}
之前將新表,上面的代碼是工作。唯一的變化是增加了線路:
StatementsSurplusDeficit newSurplusDeficit =
StatementsSurplusDeficit.CreateStatementsSurplusDeficit(newStatement.StatementsMainID);
...
lGFinanceEntities.StatementsMains.Context.AddObject("StatementsSurplusDeficit",
newSurplusDeficit);
有趣的是,東西某處創造了紀錄,因爲當我檢查的SqlServer我對5臺新記錄。另外有趣的是,每次我嘗試一些東西並運行該方法時,主鍵已經增加了2.它看起來像是兩次添加相同的記錄,但我無法弄清楚。
編輯: 下面評論建議,我改變了 'AddNewStatementsQuery',所以看起來像行:
lGFinanceEntities.StatementsMains.Context.AddObject("StatementsMains", newStatement);
改爲:
lGFinanceEntities.StatementsMains.AddObject(newStatement);
,然後到:
lGFinanceEntities.AddObject("StatementsMains", newStatement);
此DI d沒有解決密鑰違規錯誤。
如何找出/如何將數據(if語句比lGFinanceEntities.SaveChanges()
即等)被保存兩次?
有沒有理由通過'Context'屬性添加項目?您可以直接將它們添加到'DbContext'('lGFinanceEntities')或表本身('StatementMains'等)。 –
可能是因爲這是我遵循的網站/教程的做法。將考慮通過您建議的不同方法添加 – mcalex
@TiesonT。嗨,沒有增加上下文或表格似乎沒有任何影響的結果。仍然唯一的密鑰違規 – mcalex