使用实体框架从数据库中获取标识列中最后自动插入的ID
我使用下面的代码从数据库中获取自动标识列中新插入的 ID。
using (TestEntities entities = new TestEntities())
{
T2 t2 = new T2();
t2.Value = "some value";
entities.AddToT2(t2);
entities.SaveChanges();
Console.WriteLine(t2.ID);
}
当我将我的应用程序与 MS Sql 连接时,它工作正常,但如果我与 Mysql 连接,它总是返回 0(零)。
有没有其他方法可以使用实体框架获取最后插入的 ID?
谢谢...
I am using below code to get new inserted ID in auto identity column from database.
using (TestEntities entities = new TestEntities())
{
T2 t2 = new T2();
t2.Value = "some value";
entities.AddToT2(t2);
entities.SaveChanges();
Console.WriteLine(t2.ID);
}
It's working fine when I connect my application with MS Sql, but if I connect with Mysql, it always returns 0 (zero).
Is there any other way to get last inserted ID using Entity Framework?
Thanks...
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
最后我得到了解决方案。我插入行的表只有一列 - 'ID' 且自动标识 = true。当我在表中添加一个具有任何名称的可空列时,它也开始使用我的 sql!我认为问题出在我的 sql 连接器而不是实体框架中。
谢谢 :)
Finally I got soln. The table I was inserting row had only one column - 'ID' with auto identity = true. When I add one more nullable column with any name in table It's start working with my sql too!!! I think the problem is in my sql connector and not in entity framework.
Thanks :)
我必须更改身份机制才能在 SaveChanges() 之后获取插入记录的 ID。我正在使用 Visual Studio 2010 和 Telerik OpenAccess ORM。
在 Visual Studio 中打开实体模型图。
右键单击感兴趣的表并选择属性。
验证身份机制属性是否设置为 DatabaseServerCalculated。
I had to change the Identity Mechanism to get the ID of an inserted record after SaveChanges(). I'm using Visual Studio 2010 and the Telerik OpenAccess ORM.
Open the Entity Model diagram in Visual Studio.
Right-click on the table of interest and select Properties.
Verify the Identity Mechanism property is set to DatabaseServerCalculated.
我将该行调整为“entities.T2.Add(t2);”在 Vatsal Desai 的代码中,它工作得很好。
I adjusted the line to "entities.T2.Add(t2);" in Vatsal Desai's code and it works fine.
这是使用 SELECT LAST_INSERT_ID() 获取最后自动插入的 ID 的另一种方法;或选择 SCOPE_IDENTITY();
对于 mySQL:
对于 SQLServer,使用:
Here is another way to get last Auto inserted ID using SELECT LAST_INSERT_ID(); or SELECT SCOPE_IDENTITY();
for mySQL:
For SQLServer, using:
来获取自动增量字段的最后插入 ID,
在 MySQL 中,您可以使用仅适用于 MySQL
这将起作用假设实体框架使用 SQL 来驱动 MySQL 数据库。
我想一个简单的测试就能回答这个问题。
请注意,您只能从当前连接获取最后插入的 ID(这通常是您想要的)。
(据我所知)没有办法获取其他连接的最后插入的 id,除了
执行
如果来自其他连接的插入已提交,则
该操作将起作用。 使其可移植到其他数据库
如果您想让此解决方案可移植到其他数据库,您可以创建一个像这样的存储函数:
然后,如果您更改数据库后端,则可以更改该存储过程。
无需重写任何其他代码。
选择 GetLastID() 作为 Last_ID
In MySQL you can get the last inserted ID of an auto-increment field by using
For MySQL only
That will work assuming Entity Framework uses SQL to drive the MySQL database.
A simple test will answer that I guess.
Note that you will only get the last inserted ID from the current connection (which is usually what you want).
There is no way (that I know of) to get last inserted id of other connections, other than
doing a
Which will work if the insert from the other connection has been committed.
Making it portable to other DB's
If you want to make this solution portable to other DB's you can make a stored function like so:
Then you can change that stored procedure should you change DB-backend.
With no need to rewrite any other code.
SELECT GetLastID() as Last_ID