2014-10-10 44 views
0

我有一個對象,Ticket,它具有User類型的屬性。在數據庫中,Ticket表具有到User表的FK。有沒有一種簡單的方法可以將票上分配的用戶的ID傳遞給查詢?如何插入一個在Dapper中是對象的FK?

public class Ticket 
{ 
    public int Id{get;} 
    public User AssignedTo{get;set;} 
} 
public class User 
{ 
    public int Id{get;} 
} 
public Ticket Save(Ticket newTicket) 
{ 
    var sql = 
     @" 
     Declare @localId int 
     Insert into Ticket (AssignedTo) 
     Values (@AssignedTo) 

     Select @localId = CAST(SCOPE_IDENTITY() as int) 

     Select 
      Id 
      ,AssignedTo 
     From Ticket 
     Where Id = @localId"; 
    var this.connection.Query<Ticket>(sql, newTicket);   
} 

上述不起作用,因爲newTicket.AssignedTo是User對象,但我需要的是存儲用戶的ID。是否有支持的方式與Dapper一起完成此操作?

+0

檢查我的答案... – 2014-10-12 11:01:15

回答

0

我會建議把這個功能分成兩個功能。一種是將數據插入表並返回最後的身份,第二個功能是使用該ID檢索記錄。

注意:在您現有的函數中,您以錯誤的方式傳遞參數。你可以做這樣的事情與你現有的功能 -

public Ticket Save(Ticket newTicket) 
{ 
    string sql = string.Empty; 
    sql = 
     @" 
     Insert into Ticket (AssignedTo) 
     Values (@AssignedTo); 

     SELECT CAST(SCOPE_IDENTITY() as int);"; 

    var id = this.connection.Query<int>(sql, new { AssignedTo = newTicket.AssignedTo}).Single(); 

    sql = @"Select Id, AssignedTo 
       From Ticket 
       Where Id = @localId"; 
    return this.connection.Query<Ticket>(sql, new { localId = id }).Single(); 
} 

但也沒有必要,如果我假設你只想要2場IdAssignedTo再次執行SELECT查詢。因此,在這種情況下,你可以做的是新生成的ID分配給現有的對象newTicket,這樣的 -

public Ticket Save(Ticket newTicket) 
{ 
    string sql = string.Empty(); 
    sql = 
     @" 
     Insert into Ticket (AssignedTo) 
     Values (@AssignedTo); 

     SELECT CAST(SCOPE_IDENTITY() as int);"; 

    var id = this.connection.Query<int>(sql, new { AssignedTo = newTicket.AssignedTo}).Single(); 

    // Assign the last identity value to the ID proerpty of newTicket object 
    newTicket.Id = id; 

    // Return the existing object 
    return newTicket 
} 

好運...

相關問題