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 ASP.NET Core 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 (wird für Beziehungen verwendet) als auch eine Guid-Spalte (wird 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, um das Aufzählen mit int-Werten und das Erraten der nächsten Zahl zu verhindern, 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 den Datenschutz
Meine Frage: 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?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post