我上午Emp
表看起來像這樣:存儲過程MVC3實體框架 - VARBINARY
。
我創建了一個存儲過程,它看起來像這樣
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
列的轉換在表中的字符串和MVC3與EF使用它。
我在模型中映射過程的方式如下。
在我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();
}
ERROR在該方法中:
上 '僱員' 的 'EncryptFirstname' 屬性不能被設置爲 'STRING' 的值。您必須將此屬性設置爲類型爲 'Byte []'的非空值。
在我的存儲過程,如果我只是顯示EncryptFirstname
,因爲它islike,用了轉換爲字符串,不會發生錯誤,但我會得到的值是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;
}
這與我的問題完全相同。我知道這是一個較舊的帖子,但你有沒有找到解決辦法?我一直在試圖弄清楚這一天的一大部分。 – TheAmazingJason 2013-02-14 22:35:11