Ich habe am Emp
Tabelle, die wie folgt aussieht:Stored Procedure MVC3 Entity Framework - Varbinary
.
Ich habe eine gespeicherte Prozedur erstellt, die wie dieses
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
sieht Der Grund, warum ich eine gespeicherte Prozedur erstellt haben, ist einige der varbinary
Spalten in der Tabelle in Strings konvertieren und mit EF in MVC3 zu verwenden.
Die Art, wie ich die Prozedur im Modell abgebildet habe, ist wie folgt.
In meinem EmployeeViewModel
dieser die Art, wie ich die Eigenschaften Felder abgebildet am
[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; }
}
In Zugriff auf die gespeicherte Prozedur in meinem Service-Methode, das ist die Art, wie ich Ich greife darauf zu.
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 in dieser Methode:
Die 'EncryptFirstname' Eigenschaft auf 'Mitarbeiter' zu einem nicht festgelegt werden konnte Wert 'String'. Sie müssen diese Eigenschaft auf einen Nicht-Null-Wert vom Typ 'Byte []' festlegen.
In meiner gespeicherten Prozedur, wenn ich einfach die EncryptFirstname
anzuzeigen bin, wie es islike, mit heraus zu bespannen Umwandlung, tritt kein Fehler auf, aber der Wert I ist system.byte[]
bekommen wird.
Aber es muss im String Format sein, so dass ich verstehen kann, welchen Wert es ist?
Bitte beraten, was ich tun soll, um es richtig anzuzeigen.
So wandle ich die Entität in entityViewmodel um.
public EmployeeViewModel ConvertFromEmployee(Employee emp)
{
if (emp == null)
return null;
var evm = new EmployeeViewModel();
evm.LastName = emp.Lastname;
evm.EncryptFirstName = emp.EncryptLastName;
return evm;
}
Das ist genau das gleiche Problem, das ich auch habe. Ich weiß, das ist ein älterer Beitrag, aber hast du jemals eine Lösung gefunden? Ich habe versucht, das für einen guten Teil des Tages herauszufinden. – TheAmazingJason