1

我有這樣一個模型PersonalInfo所以插入:採用短小精悍的存儲過程(也許TVP)

public string FirstName { get; set;} 
public string LastName { get; set;} 
public string Email { get; set; } 
public IEnumerable<Addresses> Addresses{ get; set; } 

我的地址模型包括像:

public int AddressId { get; set; } 
public string StreedAddress { get; set; } 
public string State { get; set; } 

我需要使用存儲過程將這些插入到數據庫中,但我需要使用小巧玲瓏來做到這一點..對不起,我是新的..我嘗試了下面的東西,它沒有工作:

var Id = connection.Execute("usp_Insert", personalInfo, commandType: CommandType.StoredProcedure); 
    foreach (Addresses address in personalInfo.Addresses){ 
     connection.Execute("Insert", new {address, Id}, null, commandType: CommandType.StoredProcedure); 
     }; 

我可能在這裏做了很多錯誤的事情,我可以使用一個表格param,但我不知道它是如何與短小精悍的。

UPDATE:

所以我想,如果我不想通過地址中的第一個,我可以排除從第一發?我仍然希望一次只傳遞整個模型而不是一個支柱。

感謝

+0

什麼不起作用?在第二次調用插入存儲過程? – Simon

+0

另外,你是否需要null參數? – Simon

+0

它說:不能將NULL值插入列ID .. – NoviceDeveloper

回答

2

的問題是,短小精悍不能告訴我們 - 用存儲過程 - 需要什麼樣的參數。有數據庫API來查詢,但這樣做總是非常昂貴。對於定期查詢,它可以很好地理解需要什麼,但是對於存儲過程:它們是神祕的。因此,短小精悍只是試圖包括它所能看到的一切。

最好的選擇是一個「新」投影,它可以選擇你需要的屬性作爲你的參數。

+0

是的,你將如何處理上面的代碼地址,因爲它是一個枚舉? – NoviceDeveloper

+1

@Novice我只是選擇你想要的屬性,所以在父級別可能是'new {pi.FirstName,pi.LastName,pi.Email}',在子級別'new {addr.AddressId,addr.StreetAddress,addr .State}'。嗯,格式化在這方面效果並不好...... –

+0

肯定是格式化的東西,而不是通過地址循環,我可以使用TVP ...如果是這樣,你怎麼去做? – NoviceDeveloper

相關問題