2012-04-03 179 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是非常有益的,我发现了标题为“导入存储过程返回除了实体类型”一节中的答案。因此,解决方案是在上一个屏幕截图中,您位于对话框“添加功能导入”中,而不是选择实体单选按钮,首先单击“获取列信息”,然后单击“创建新复合类型”按钮。现在,您可以返回并选择“复杂”单选按钮,并从下拉列表中选择此新类型。现在您可以将视图设置为使用此模型,并且您将全部设置好。