У меня есть Emp
таблица, которая выглядит так:
.
Я создал хранимую процедуру, которая выглядит следующим образом
ALTER PROCEDURE [dbo].[GetAllEmployees]
AS
BEGIN
OPEN SYMMETRIC KEY TestTableKey DECRYPTION
BY CERTIFICATE EncryptTestCert
SELECT
EMPId,
Firstname,
Lastname,
AddessId,
JobId,
DateofBirth,
CONVERT(NVARCHAR(50),DECRYPTBYKEY(EncryptFirstname)) AS [EncryptFirstname],
CONVERT(NVARCHAR(50),DECRYPTBYKEY(EncryptLastname)) AS [EncryptLastname]
FROM
EMPloyee
END
Причина, по которой я создал хранимую процедуру, состоит в том, чтобы преобразовать некоторые из столбцов varbinary
в таблице в строки и использовать ее с EF в MVC3.
Способ, которым я описал процедуру в модели, описан ниже.
В моем EmployeeViewModel
так я сопоставляю свойства с полями
[Description("EmployeeDetails")]
public class EmployeeViewModel: IEmployeeModel
{
public Guid EmpId { get; set; }
[Display(Name = "EncryptLastName")]
public byte[] EncryptLastName { get; set; }
[Display(Name = "EncryptFirstName")]
public byte[] EncryptFirstName { get; set; }
[Display(Name = "LastName")]
public string LastName { get; set; }
}
При доступе к хранимой процедуре в моем методе обслуживания, я так к ней обращаюсь.
public List<EmployeeViewModel> GetEmpList()
{
var ent = new EncryptionEntities();
List<Employee> allEmp = new List<Employee>();
allEmp = ent.GetEmployees().ToList();
ConvertViewModelObject cvmo = new ConvertViewModelObject();
List<EmployeeViewModel> empVM = new List<EmployeeViewModel>();
foreach (var item in allEmp)
{
empVM.Add(cvmo.ConvertFromEmployee(item));
}
return empVM.ToList();
}
ОШИБКА в этом методе:
Свойство 'EncryptFirstname' в 'Employee' не может быть установлено в
'Строковое значение. Вы должны установить для этого свойства ненулевое значение типа
'Byte []'.
В моей хранимой процедуре, если я просто отображаю EncryptFirstname
как есть, без преобразования в строку, ошибки не возникает, но значение, которое я получу, равно system.byte[]
.
Но он должен быть в строковом формате, чтобы я мог понять, какое значение он имеет?
Посоветуйте, пожалуйста, что мне делать, чтобы отобразить его правильно.
Это способ преобразования сущности в entityViewmodel.
public EmployeeViewModel ConvertFromEmployee(Employee emp)
{
if (emp == null)
return null;
var evm = new EmployeeViewModel();
evm.LastName = emp.Lastname;
evm.EncryptFirstName = emp.EncryptLastName;
return evm;
}