'SELECT CAST(SCOPE_IDENTITY() as int)' 在 DapperORM 中的重要性
The importance of 'SELECT CAST(SCOPE_IDENTITY() as int)' in DapperORM
我是 C# 的新手,而且绝对是 Dapper.NET 的新手。这是我第一次处理 ORM 和框架,所以我想了解更多有关语法的信息。
我看过几个 INSERT
查询,发现所有查询都有这个
SELECT CAST(SCOPE_IDENTITY() AS INT);
在 INSERT INTO...;
行之后。
我想知道它的重要性或用途。谢谢
编辑:这是我编写的一些代码,据我测试,它正在运行。
这是Users.cs
:
public class Users
{
private int _uid;
private string _fullname;
private string _username;
private string _passcode;
public int uid
{
get { return _uid; }
set { _uid = value; }
}
public string fullname
{
get { return _fullname; }
set { _fullname = value; }
}
public string username
{
get { return _username; }
set { _username = value; }
}
public string passcode
{
get { return _passcode; }
set { _passcode = value; }
}
}
这是 insertUser.cs
:
public Users InsertData(Users newUser)
{
string strQry = @"INSERT INTO [Users] VALUES (@uid, @fullname, @username, @passcode);
SELECT * FROM [Users] WHERE [uid] = CAST(SCOPE_IDENTITY() as int);";
using(var conn = InitOpenConn())
{
try
{
var ins = conn.Query<Users>(strQry, newUser).Single();
return ins;
}
catch (Exception ex)
{
throw ex;
}
}
}
这是Program.cs
:
InsertUser ium = new InsertUser();
try
{
Users newUser = new Users
{
uid = 10,
fullname = "James Bond",
username = "james007",
passcode = "095e3cbaf34467fbe1b0f4cd846a57460718d2b4ca504caca28ae5287e8d076db3ddadac11db87ab6ac9dac4b8d84d9a65e67e98ab6ef979c61f277f51df36f3"
};
Users insUsr = ium.InsertData(newUser);
refreshTable();
MessageBox.Show("Added !");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
当您向 SQL 服务器 table 中插入一个新行并包含 Identity
列时,ORM 需要从数据库中获取生成的 ID 以更新您的模型直接在应用程序中。
示例:
/****************** pseudo code ******************/
SomeClass obj = new SomeClass();
obj.SomeProperty = someValue;
// INSERT TO database with Dapper and return inserted ID
int insertedID = SomeMethodToInsertUsingDapper(obj);
obj.ID = insertedID;
// The generated ID is get from the database using
// SELECT CAST(SCOPE_IDENTITY() AS INT);
// so this next line prints the ID generated in the database.
Console.WriteLine(obj.ID);
小巧的限制:
Dapper 对身份列有一些限制,因此使用 Dapper
的人使用此 SQL 语法 SELECT CAST(SCOPE_IDENTITY() AS INT)
来获取生成的 ID
来自 database
。然后在 application
.
中使用 ID
Identity Column in a numeric column in the database that gets
incremented automatically on each insert.
SELECT CAST(SCOPE_IDENTITY() AS INT)
这行代码returns最后插入的identity ID of the table.
我们有很多用途。就像我们检查了值插入与否,如果你想对当前插入的电流执行一些操作。
如果您使用的是 EF(ORM) 然后您 table 是 EMp_master 那么您可以使用以下语法获取当前插入的 ID
EMp_master obj=new Emp_master
obj.first="suraj";
obj.Emp_master.add(obj);
obj.savechagnes();
int currentinsertedid = obj.empid // this syntax same as SELECT
CAST(SCOPE_IDENTITY() AS INT) both give same record.
我是 C# 的新手,而且绝对是 Dapper.NET 的新手。这是我第一次处理 ORM 和框架,所以我想了解更多有关语法的信息。
我看过几个 INSERT
查询,发现所有查询都有这个
SELECT CAST(SCOPE_IDENTITY() AS INT);
在 INSERT INTO...;
行之后。
我想知道它的重要性或用途。谢谢
编辑:这是我编写的一些代码,据我测试,它正在运行。
这是Users.cs
:
public class Users
{
private int _uid;
private string _fullname;
private string _username;
private string _passcode;
public int uid
{
get { return _uid; }
set { _uid = value; }
}
public string fullname
{
get { return _fullname; }
set { _fullname = value; }
}
public string username
{
get { return _username; }
set { _username = value; }
}
public string passcode
{
get { return _passcode; }
set { _passcode = value; }
}
}
这是 insertUser.cs
:
public Users InsertData(Users newUser)
{
string strQry = @"INSERT INTO [Users] VALUES (@uid, @fullname, @username, @passcode);
SELECT * FROM [Users] WHERE [uid] = CAST(SCOPE_IDENTITY() as int);";
using(var conn = InitOpenConn())
{
try
{
var ins = conn.Query<Users>(strQry, newUser).Single();
return ins;
}
catch (Exception ex)
{
throw ex;
}
}
}
这是Program.cs
:
InsertUser ium = new InsertUser();
try
{
Users newUser = new Users
{
uid = 10,
fullname = "James Bond",
username = "james007",
passcode = "095e3cbaf34467fbe1b0f4cd846a57460718d2b4ca504caca28ae5287e8d076db3ddadac11db87ab6ac9dac4b8d84d9a65e67e98ab6ef979c61f277f51df36f3"
};
Users insUsr = ium.InsertData(newUser);
refreshTable();
MessageBox.Show("Added !");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
当您向 SQL 服务器 table 中插入一个新行并包含 Identity
列时,ORM 需要从数据库中获取生成的 ID 以更新您的模型直接在应用程序中。
示例:
/****************** pseudo code ******************/
SomeClass obj = new SomeClass();
obj.SomeProperty = someValue;
// INSERT TO database with Dapper and return inserted ID
int insertedID = SomeMethodToInsertUsingDapper(obj);
obj.ID = insertedID;
// The generated ID is get from the database using
// SELECT CAST(SCOPE_IDENTITY() AS INT);
// so this next line prints the ID generated in the database.
Console.WriteLine(obj.ID);
小巧的限制:
Dapper 对身份列有一些限制,因此使用 Dapper
的人使用此 SQL 语法 SELECT CAST(SCOPE_IDENTITY() AS INT)
来获取生成的 ID
来自 database
。然后在 application
.
ID
Identity Column in a numeric column in the database that gets incremented automatically on each insert.
SELECT CAST(SCOPE_IDENTITY() AS INT)
这行代码returns最后插入的identity ID of the table.
我们有很多用途。就像我们检查了值插入与否,如果你想对当前插入的电流执行一些操作。
如果您使用的是 EF(ORM) 然后您 table 是 EMp_master 那么您可以使用以下语法获取当前插入的 ID
EMp_master obj=new Emp_master
obj.first="suraj";
obj.Emp_master.add(obj);
obj.savechagnes();
int currentinsertedid = obj.empid // this syntax same as SELECT
CAST(SCOPE_IDENTITY() AS INT) both give same record.