Dyl*_*lan 21 sql-server servicestack ormlite-servicestack
对于具有标识的表:
[AutoIncrement]
public int Id { get; set;}
Run Code Online (Sandbox Code Playgroud)
将新行插入数据库时,检索对象Id的最佳方法是什么?
例如:
db.Insert <>(new User());
插入后Id的值为0,但在数据库中显然不是这种情况.我能看到的唯一可能性如下:
Id = (int)db.GetLastInsertId();
Run Code Online (Sandbox Code Playgroud)
但是我不相信这是一个安全的号召.如果同时发生100个插入,则可能会返回另一个插入的Id.在EF中进行插入时,将为您设置ID.
有谁知道最好的方法吗?
myt*_*thz 28
在默认使用参数化查询的ServiceStack.OrmLite v4中,有几个选项db.Save()会自动填充AutoIncrement Id,例如:
db.Save(item);
item.Id //populated with the auto-incremented id
Run Code Online (Sandbox Code Playgroud)
否则,您可以使用以下选择最后一个插入ID:
var itemId = db.Insert(item, selectIdentity:true);
Run Code Online (Sandbox Code Playgroud)
对于OrmLite v3
正确的调用是db.GetLastInsertId()针对SQL Server的调用,例如调用SELECT SCOPE_IDENTITY(),它返回该连接的最后插入的id .
这是安全的,因为可能发生的所有其他并发插入使用不同的DB连接.为了让其他人使用相同的连接,需要将其丢弃并释放回池中.
| 归档时间: |
|
| 查看次数: |
7364 次 |
| 最近记录: |