0

如何將參數傳遞給使用EF6返回多條記錄的存儲過程 - 使用帶有加密列的SQL Server 2016存儲過程的DbContext如何將參數傳遞給返回多個記錄的存儲過程

使用EF 6.1.3時,SQL Server 2016 - AlwaysEncrypted(確定性)

有一個few articles是談論使用ADO .NET 4.6通過使用命令,參數對象做到這一點,但我無法找到一個從我的EF DbContext做到這一點。

回答

0
//make sure to provide the actual datatype and size on the parameter 
//you can use reflection on the entity to dynamically get/set the property info by a common function. 

var paratmeterNames = new StringBuilder(); 
string paratmeterNamesUpdated = null; 

if (lastName != null) 
{ 
    var lastNameParam = new SqlParameter("@lastName", SqlDbType.VarChar, 60) {Value = lastName}; 
    parameterList.Add(lastNameParam); 
    paratmeterNames.Append("@lastName,"); 
} 

if (firstName != null) 
{ 
    var firstNameParameter = new SqlParameter("@firstName", SqlDbType.VarChar, 30) {Value = firstName}; 
    parameterList.Add(firstNameParameter); 
    paratmeterNames.Append("@firstName,"); 
} 

if (paratmeterNames != null && paratmeterNames.Length > 0) 
{ 
    paratmeterNamesUpdated = paratmeterNames.ToString().TrimEnd(','); 
} 

var result = _context.Database.SqlQuery<T>("exec sp_name " + paratmeterNamesUpdated, parameterList.ToArray()).ToList(); 

//this will make below **calls to SQL DB:** 
//exec sp_describe_parameter_encryption N'exec sp_name @lastName,@firstName',N'@lastName varchar(60),@firstName varchar(30)' 
//exec sp_executesql N'exec sp_name @lastName,@firstName',N'@lastName varchar(60),@firstName varchar(30)',@lastName=0x01A2256C34F97,@firstName=0x018EE4BD11BA7 
相關問題