2012-04-03 159 views
2

我上午Emp表看起來像這樣:存儲過程MVC3實體框架 - VARBINARY

Employee

我創建了一個存儲過程,它看起來像這樣

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使用它。

我在模型中映射過程的方式如下。

FunctionImport1 into Model(EF)

FunctionImport2 into Model(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; 
} 
+0

這與我的問題完全相同。我知道這是一個較舊的帖子,但你有沒有找到解決辦法?我一直在試圖弄清楚這一天的一大部分。 – TheAmazingJason 2013-02-14 22:35:11

回答

0

我發現這article是非常有益的,我發現了標題爲「導入存儲過程返回除了實體類型」一節中的答案。因此,解決方案是在上一個屏幕截圖中,您位於對話框「添加功能導入」中,而不是選擇實體單選按鈕,首先單擊「獲取列信息」,然後單擊「創建新複合類型」按鈕。現在,您可以返回並選擇「複雜」單選按鈕,並從下拉列表中選擇此新類型。現在您可以將視圖設置爲使用此模型,並且您將全部設置好。