Meine Entitäten folgen einem Muster, bei dem jede Tabelle sowohl einen int-Primärschlüssel (für Beziehungen verwendet) als auch eine Guid-Spalte (als eindeutige externe Kennung verwendet) hat.
Code: Select all
public class Employee
{
public int Id { get; set; }
public Guid GuidId { get; set; }
public int GenderId { get; set; }
public int DepartmentId { get; set; }
}
public class Gender
{
public int Id { get; set; }
public Guid GuidId { get; set; }
public string Name { get; set; }
}
public class Department
{
public int Id { get; set; }
public Guid GuidId { get; set; }
public string Name { get; set; }
}
Beim Einfügen eines Mitarbeiters enthält die Anforderungsnutzlast GUIDs für verwandte Entitäten:
Code: Select all
{
"firstName": "John",
"genderId": "f8b8120a-6b8c-43b8-b47f-5c43d6c3a5b2",
"departmentId": "a41cf2cd-19b9-45c4-b1c3-2a9d24b79b9e"
}
Code: Select all
var genderId = await _unitOfWork.GeneralReferenceRepo.GetIdByGuid(request.GenderId);
var departmentId = await _unitOfWork.DepartmentRepo.GetIdByGuid(request.DepartmentId);
Ich habe Folgendes gelesen:
- Die Verwendung von int für Fremdschlüssel verbessert die Leistung und Indexgröße.
- Die Verwendung von Guid für die API-Offenlegung verbessert die Sicherheit und externe Daten Integrität.
Was ist die beste Vorgehensweise, um mehrere GUID-Verweise auf ihre entsprechenden INT-IDs in EF Core effizient aufzulösen, bevor eine Entität eingefügt wird?
Ich möchte mehrere Abfragen vermeiden und gleichzeitig INT-Fremdschlüssel für die Leistung und GUIDs für die externe Offenlegung beibehalten.
Hinweis: Ich verstehe, dass GUIDs nicht von Natur aus ein System bilden „sicher“.
Mein Ziel ist es nicht, sie zur Verschlüsselung oder Zugriffskontrolle zu verwenden, sondern lediglich zu vermeiden, dass sequentielle Datenbank-IDs in API-URLs offengelegt werden.
Es geht mehr um Datenschutz als um tatsächliche Sicherheit.
Mobile version