2011-03-28 222 views
0

實體框架4返回鍵/主鍵實體框架4返回鍵/主鍵

我試圖找到一種方法,返回鍵/主鍵,而無需創建一個存儲過程來爲我做使用:

CREATE PROCEDURE [dbo].[UserRecords] 
(
    @Name varchar(10) 
) AS 

-- INSERT the new record 
INSERT INTO MyTable (Name) 
VALUES(@Name) 

-- Now return the InventoryID of the newly inserted record 
SELECT SCOPE_IDENTITY() AS ID 

雖然Visual Studio 2010中我則使用添加功能導入從模型瀏覽器,並創建一個複雜類型。

然後雖然C#我使用下面的代碼來檢查它的工作。

SQL_DB_Entities DB= new SQL_DB_Entities(); 
      var ReturnValue = DB.UserRecords("BOB").First(); 
      Console.Write(ReturnValue.ID); 
      Console.Read(); 

我只是在尋找一種更好的方式返回ID也被不會很肯定IM引起的頭痛爲自己拉斯特上走下賽場。

如果您覺得這不是返回密鑰的最佳方式,請告訴我。

我已經嘗試過這種方式,但返回0

SQL_DB_Entities DB = new SQL_DB_Entities(); 
User UserObject = new User{Name = 「BOB」}; 
DB.AddToUserTable(UserObject); 
DB.SaveChanges(): 
Int key = UserObject.ID; 
Console.WriteLine(key.ToString()); 

我還要提到的是,db是主鍵不是我的申請後看。

+0

從內存EF通常會選擇/返回插入的對象,包括PK。我不知道爲什麼你沒有得到它,如果這是明確獲得PK的正確方法。你爲什麼需要它? – JTew 2011-03-28 01:57:36

+1

最後一個例子必須工作。如果它不是你配置錯誤的東西。 – 2011-03-28 06:58:24

+0

@Ladislav和@Ben你的100%正確,非常感謝你的幫助。 – Ches 2011-03-28 11:44:28

回答

1

如果您在實體中正確設置了StoreGeneratedPatternIdentity,並且您已經在數據庫中自動生成PK,則在每次保存更改後,EF將填充插入實體的ID。檢查this article以瞭解商店生成的模式。

+0

所有工作正常,但返回剛剛插入的記錄的ID似乎是問題。我有StoreGeneratedPattern設置爲標識。這是自動通過Visual Studio從數據庫更新模型。 – Ches 2011-03-28 11:03:34

+0

@Ches:現在我沒有失望。你說它工作正常,但它會導致一個問題。你可以通過SQL Profiler執行什麼語句嗎? – 2011-03-28 11:07:57

+0

我的問題沒有插入數據到表中,我插入數據後直接返回ID。現在抓住SQL Profiler的詳細信息。 – Ches 2011-03-28 11:20:40

0

通常的方法是將模型中PK列的StoreGeneratedPattern屬性設置爲標識。或者,如果您使用的代碼優先,註釋屬性搭配:

[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] 

我不知道這是否可與存儲過程,雖然。順便說一句,你在這種情況下使用sprocs的任何特殊原因?

+0

Entity Frame發現我在表中有一個主鍵並用它作爲標識。所以這一直工作。 – Ches 2011-03-28 03:20:32

+0

只有使用Sprocs作爲唯一的方式,我可以在插入 – Ches 2011-03-28 03:40:46

+0

@Ches後返回密鑰。不,使用sprocs不是唯一的方法。在您的數據庫中,將列標記爲標識,然後將模型中同一列的StoreGeneratedPattern屬性設置爲標識。實體框架將完成剩下的工作。我一直都在做這種善意的事情,而且沒有看到任何問題。 – Ben 2011-03-28 07:58:12

0

正常情況下,PK作爲EF對象EntityKey上的特定屬性處理。你可能最好看看EntityKeys。