【问题标题】:Entity Framework 4 Returning KEY/Primary Key实体框架 4 返回 KEY/Primary Key
【发布时间】:2011-03-28 01:46:42
【问题描述】:

Entity Framework 4 返回 KEY/Primary Key

我正在尝试找到一种方法来返回键/主键,而无需创建存储过程来为我执行此操作:

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 然后我使用模型浏览器中的 Add Function Import 并创建一个复杂类型。

然后虽然 C# 我使用以下代码来检查它的工作。

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

我只是在寻找一种更好的方式来返回 ID,并且非常确定我不会让自己在赛道上持续头痛。

如果您认为这不是归还密钥的最佳方式,请告诉我。

我已经尝试过这种方式,但返回 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()); 

我还应该提到,数据库正在处理主键而不是我的应用程序。

【问题讨论】:

  • 从内存中 EF 通常会选择/返回插入的对象,包括 PK。我不确定您为什么没有得到它,以及它是否是明确获得 PK 的正确方法。为什么需要它?
  • 最后一个例子必须有效。如果不是,您配置错误。
  • @Ladislav 和 @Ben 你都 100% 正确,非常感谢你的帮助。

标签: c# entity-framework entity-framework-4 primary-key key


【解决方案1】:

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

【讨论】:

  • 一切正常,但返回刚刚插入的记录的 ID 似乎是问题所在。我将 StoreGeneratedPattern 设置为 Identity。这是通过数据库中的 Visual Studio 更新模型自动完成的。
  • @Ches:现在我不明白了。您是说它工作正常,但会导致问题。你能检查一下 SQL Profiler 执行了哪些语句吗?
  • 我的问题不是将数据插入表中,而是在我插入数据后直接返回 ID。立即获取 SQL Profiler 详细信息。
【解决方案2】:

通常,PK 作为 EF 对象 EntityKey 上的特定属性处理。您可能最好看看 EntityKeys。

【讨论】:

    【解决方案3】:

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

    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    

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

    【讨论】:

    • 实体框架发现我在表中有一个主键并将其用作身份。所以这立即奏效了。
    • 仅使用 Sprocs 作为插入后返回密钥的唯一方法
    • @Ches。不,使用存储过程不是唯一的方法。在您的数据库中,将该列标记为身份,然后将模型中同一列的 StoreGeneratedPattern 属性设置为身份。实体框架将完成其余的工作。我一直在做这样的事情,而没有看到 sproc。
    • 我将 StoreGeneratedPattern 设置为 Identity,并且添加数据没有问题。它返回直接插入的密钥。我毫不怀疑你是对的。但到目前为止我还无法让它工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-31
    • 2021-05-17
    • 1970-01-01
    • 2015-01-03
    • 1970-01-01
    • 2011-04-20
    相关资源
    最近更新 更多