DapperORM에서 'SELECT CAST (SCOPE_IDENTITY ()를 int로 사용)'의 중요성

.net c# dapper frameworks orm

문제

저는 C #을 처음 사용하고 Dapper.NET을 처음 접했습니다. ORM과 프레임 워크를 다루는 첫 번째 작업이므로 일부 구문에 대해 더 자세히 알고 싶습니다.

몇 가지 INSERT 쿼리를 보았고 모두가이 것을 보았습니다.

SELECT CAST(SCOPE_IDENTITY() AS INT);

INSERT INTO...; 후에 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);
}

수락 된 답변

Identity 열이있는 SQL Server 테이블에 새 행을 삽입하면 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는 Identity Column에 몇 가지 제한을 가지고 있습니다 . 따라서 Dapper 사용하는 사람들은이 SQL 구문 SELECT CAST(SCOPE_IDENTITY() AS INT) 를 사용하여 database 에서 생성 된 ID 를 가져옵니다. 그런 다음 해당 IDapplication 에서 사용하십시오.

Identity 각 삽입시 자동으로 증가하는 데이터베이스의 숫자 열의 열입니다.


인기 답변

SELECT CAST(SCOPE_IDENTITY() AS INT) 

이 코드 줄은 테이블의 마지막 ID ID를 반환합니다.

우리는 이것을 많이 사용합니다. 우리가 삽입 된 값을 확인한 것처럼 그리고 현재 삽입 된 전류에 대해 어떤 연산을 수행하기를 원하는 경우에도 마찬가지입니다.

EF (ORM)을 사용하고 있고 테이블이 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. 


아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.