Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架4返回键/主键_C#_Entity Framework_Entity Framework 4_Primary Key_Key - Fatal编程技术网

C# 实体框架4返回键/主键

C# 实体框架4返回键/主键,c#,entity-framework,entity-framework-4,primary-key,key,C#,Entity Framework,Entity Framework 4,Primary Key,Key,实体框架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 SC

实体框架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
尽管VisualStudio2010,我还是从模型浏览器中使用Add函数导入并创建了一个复杂类型

尽管是C,我还是使用下面的代码来检查它的工作情况

 SQL_DB_Entities DB= new SQL_DB_Entities();
            var ReturnValue = DB.UserRecords("BOB").First();
            Console.Write(ReturnValue.ID);
            Console.Read();
我只是在寻找一种更好的方式来归还身份证,同时也非常确定我不会在赛道上最后一次给自己带来头痛

如果您觉得这不是归还钥匙的最佳方式,请告诉我

我尝试过这种方法,但返回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负责的是主键,而不是我的应用程序。

通常的方法是将模型中PK列的StoreGeneratedPattern属性设置为Identity。或者,如果先使用代码,请使用以下内容注释属性:

[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] 

不过,我不确定这是否适用于存储过程。顺便问一下,在这种情况下使用存储过程有什么特殊原因吗?

通常,PKs作为EF对象上的特定属性处理。您最好查看EntityKeys。

如果您在实体中正确设置了StoreGeneratedPattern以标识,并且在数据库中有自动生成的PK,EF将在每次保存更改后填充插入实体的ID。检查以了解存储生成的模式。

从内存中,EF通常会选择/返回插入的对象,包括PK。我不确定你为什么没有得到它,以及它是否是明确获得PK的正确方法。你为什么需要它?最后一个例子一定有用。如果不是您配置错误的话。@Ladislav和@Ben您都100%正确,非常感谢您的帮助。实体框架发现我在表中有一个主键,并将其用作标识。所以,这很快就奏效了。只有使用存储过程作为唯一的方法,我才能在一段时间后返回密钥insert@Ches. 不,使用存储过程不是唯一的方法。在数据库中,将列标记为identity,然后将模型中同一列的StoreGeneratedPattern属性设置为identity。实体框架将完成其余工作。我一直在做这类事情,没有看到任何存储过程。我将StoreGeneratedPattern设置为Identity,添加数据没有问题。它返回直接插入的内容的键。我毫不怀疑你是对的。但到目前为止,我还无法让它工作。所有的工作正常,但返回刚刚插入的记录的ID似乎是个问题。我已将StoreGeneratedPattern设置为Identity。这是通过数据库中的Visual Studio更新模型自动完成的。@Ches:现在我不取消重新启动。你是说它工作正常,但会引起问题。您能检查一下SQL Profiler执行的是什么语句吗?我的问题不是将数据插入表中,而是在插入数据后直接返回ID。现在获取SQL探查器详细信息。