Wie können GUID- und INT-Schlüssel in EF Core effizient gehandhabt werden, wenn Entitäten auf mehrere Tabellen verweisenC#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Wie können GUID- und INT-Schlüssel in EF Core effizient gehandhabt werden, wenn Entitäten auf mehrere Tabellen verweisen

Post by Anonymous »

Ich erstelle eine .NET 9-Web-API mit Entity Framework Core und SQL Server.

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; }
}
Ich lege Guid-Werte über die API offen (aus Sicherheitsgründen), aber intern verwenden alle Beziehungen die int-Schlüssel für eine bessere Indizierung und Join-Leistung.
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"
}
Vor dem Einfügen löse ich derzeit alle zugehörigen GUIDs wie folgt in INTs auf:

Code: Select all

var genderId = await _unitOfWork.GeneralReferenceRepo.GetIdByGuid(request.GenderId);

var departmentId = await _unitOfWork.DepartmentRepo.GetIdByGuid(request.DepartmentId);
Dieser Ansatz funktioniert, aber wenn eine Entität viele Fremdschlüssel hat, führt dies zu mehreren Datenbankaufrufen, nur um GUIDs vor dem Speichern in INTs aufzulösen.
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.
Meine Fragen:
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.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post