2011-03-28 48 views
4

我正在使用以下代碼從數據庫中獲取自動標識列中的新插入標識。從DB使用實體框架獲取標識列中的最後一個自動插入標識

using (TestEntities entities = new TestEntities()) 
{ 
    T2 t2 = new T2(); 
    t2.Value = "some value"; 
    entities.AddToT2(t2); 
    entities.SaveChanges(); 

    Console.WriteLine(t2.ID); 

} 

它的正常工作,當我和MS SQL連接我的應用程序,但如果我與MySQL連接時,它總是返回0(零)。

是否有任何其他方式使用實體框架獲取最後插入的ID?

謝謝...

+0

與編寫MySQL驅動程序的人交談? EF當然支持這一點;你的司機可能會也可能不會。 – 2011-03-28 15:15:52

回答

0

最後我得到了soln。我插入行的表只有一列 - 自動識別= true的'ID'。當我在表中添加一個更多的可空列時,它也開始使用我的sql了!我認爲這個問題是在我的SQL連接器,而不是在實體框架。

謝謝:)

0

在MySQL中,你可以通過使用

對於MySQL獲得一個自動遞增字段的最後插入的ID只

SELECT last_insert_id() as Last_ID 

,將工作假設實體框架使用SQL來驅動MySQL數據庫。
一個簡單的測試將回答我的猜測。

請注意,您只會從當前連接(這通常是您想要的)獲取最後插入的ID。
沒有辦法(據我所知)得到最後插入其他連接的ID,除了 做

SELECT MAX(id) FROM sometable as Last_ID 

在從其他連接插入一直致力於這將正常工作。

使它移植到其他數據庫的
如果你想使這個解決方案移植到其他 DB的你可以做一個存儲功能,像這樣:

CREATE FUNCTION GetLastID: integer; 
BEGIN 
    DECLARE lastid: integer; 

    SELECT last_insert_id() INTO lastid; 
    RETURN lastid; 
END; 

然後你就可以改變該存儲過程你應該改變DB後端。
無需重寫任何其他代碼。

SELECT GetLastID()as Last_ID

+0

加入,我不認爲「選擇最大(ID)...」將始終有效。我無法使用它。我也在MySql網站的論壇上發佈了這個問題,但還沒有得到答覆。與此同時,我一直在處理這個問題。希望很快就會解決。這對我們的項目非常重要... – 2011-04-09 13:13:17

+0

好的,SELECT last_insert_id()怎麼樣?那樣有用嗎? – Johan 2011-04-12 09:21:47

+0

是的,只能用於MySQL,對吧?我的應用程序需求是製作通用解決方案,因爲它是我公司的產品,我不知道客戶端將使用哪個數據庫與此應用程序。所以...解決方案必須是通用的:)。順便說一句,感謝您對我的問題的興趣... – 2011-04-14 10:27:45

1

我不得不改變身份的SaveChanges機制後,得到一個插入記錄的ID()。我正在使用Visual Studio 2010和Telerik OpenAccess ORM。

在Visual Studio中打開實體模型圖。 右鍵單擊感興趣的表並選擇屬性。 驗證Identity Mechanism屬性是否設置爲DatabaseServerCalculated。

相關問題