2011-08-07 46 views
2

我在這裏遇到了一個令我頭痛的問題。這是一個非常簡單的表格插入一個非常簡單的表格...我做了一千次的東西,但由於某種原因不在這裏工作。使用EF 4.1插入不保存代碼優先

基本上,我正在運行一個簡單的INSERT(通過存儲庫模式),然後保存上下文更改。沒有錯誤,我可以單步執行,但記錄只是不在數據庫中。爲了(希望)覆蓋我的屁股對抗愚蠢的興趣:我知道我連接到正確的數據庫,因爲它提取種子數據就好(並且在我的應用中只有1個連接字符串)。另外,我知道數據庫不會每次都重建。

下面是調用代碼:

var result = new Core.Models.Poll 
{ 
    ElectionId = electionId, 
    DatePublished = pubDate, 
    DateCreated = DateTime.Now, 
    NameEn = nameEn, 
    NameFr = nameFr, 
    Params = splitVals, 
    Url = url, 
    Slug = String.Empty 
};  

Components.PollRepository.Insert(result); 
Components.PollRepository.Save(); 

這裏是信息庫中的方法:

public void Insert(Poll poll) 
{ 
    Context.Polls.Add(poll); 
} 

public void Save() 
{ 
    Context.SaveChanges(); 
} 

Context.Polls.Add(poll);行,我檢查我的對象......當我手動運行在輪詢中使用值插入SSMS中的語句,創建記錄沒有問題。當我在下一行(})運行Context.Entry(poll)時,我看到它的狀態爲已添加(如預期的那樣)。

我在本地開發機器上使用IIS Express在SQLEXPRESS上運行此操作。

哦,這裏的投票類的鍵(我試過DatabaseGenerated屬性,沒有運氣):

[Key] 
//[DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
public int Id { get; set; } 

任何幫助,甚至什麼都去嘗試,是極大的讚賞。

回答

2

檢查PollReppsitory中Context變量的聲明。還要檢查組件中的PollRepository屬性。確保每次都返回相同的實例。

如果用於保存更改的上下文實例不是用於插入的那個,您將看到這些結果。

您在Insert方法中檢查了對象的狀態。我會在Save方法中做同樣的事情。如果實體在那裏並且具有新的狀態,那麼您可以排除我的假設,即插入和保存正在不同的上下文中執行。

+0

啊,我應該更清楚了。這是一個WCF REST服務。我從插入請求中獲取完全不同的請求中的記錄。 我按照你的建議檢查了聲明,它們都來自Ninject,所以我認爲我在那裏很安全。 (即,插入發生在與提取相同的組件上:'Components.PollRepository')。 感謝您的建議,但! –

+0

我並不太在意抓取記錄,而是在這裏重要的插入和保存操作。我已經添加到我的答案。 –

+0

Scott的正確答案+4am =我的不理解。我今天早上重新閱讀你的答案,這很有道理。錯誤發生在Ninject配置中。謝謝! –