【发布时间】:2012-02-05 15:07:18
【问题描述】:
在本网站上提出了许多与执行插入后检索 IDENTITY 相关的问题。我们获取身份的方式是在调用 SaveChanges() 之后立即进行下面的调用;
context.MyClass.OrderByDescending(c => c.Id).FirstOrDefault();
这似乎始终如一地工作可能完全足够了;但是,如果在调用之间添加另一条记录,它可能会出现错误。所以第一个问题是,鉴于 EF 在跨区域上下文中执行,这种方法是否合理?
其次,对以下问题的回答表明可能有更好的方法。
Linq to SQL - How to find the the value of the IDENTITY column after InsertOnSubmit()
在该答案中,调用 SubmitChanges() 后,以下调用(其中“tst”表示用户的类)检索值。
Response.Write("id:" + tst.id.ToString)
这似乎与 LINQ to Entities 中的工作方式完全相同,在调用保存更改之后,类的实例现在包含 id。
context.MyClass.Add(myClass);
context.SaveChanges();
int myNewIdentity = myClass.Id;
由于我们要求提供类实例的实际 ID(实际记录),因此它似乎是故障安全的。而且,EF 的设计者应该提供这样的基本功能似乎是合乎逻辑的。谁能确认这是获得身份的正确方法或至少是最佳实践?
【问题讨论】:
-
当然是这样做的。为什么你会认为它不是?
-
身份必须更新主要用于更改跟踪,所以是的,这很可能是最好的方法。
标签: linq entity-framework identity