实体框架4返回键/主键
问题描述:
实体框架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是主键不是我的申请后看。
答
如果您在实体中正确设置了StoreGeneratedPattern
到Identity
,并且您已经在数据库中自动生成PK,则在每次保存更改后,EF将填充插入实体的ID。检查this article以了解商店生成的模式。
答
通常的方法是将模型中PK列的StoreGeneratedPattern属性设置为标识。或者,如果您使用的代码优先,注释属性搭配:
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
我不知道这是否可与存储过程,虽然。顺便说一句,你在这种情况下使用sprocs的任何特殊原因?
从内存EF通常会选择/返回插入的对象,包括PK。我不知道为什么你没有得到它,如果这是明确获得PK的正确方法。你为什么需要它? – JTew 2011-03-28 01:57:36
最后一个例子必须工作。如果它不是你配置错误的东西。 – 2011-03-28 06:58:24
@Ladislav和@Ben你的100%正确,非常感谢你的帮助。 – Ches 2011-03-28 11:44:28