Guardando post come questo su StackOverflow , il consenso sembra che tu debba nascondere gli ID incrementali dalle API esterne per sicurezza.
Tuttavia, sto riscontrando problemi nell'elaborazione di una buona implementazione.
Non voglio usare Guids come ID, perché come indicato qui , porta alla frammentazione della pagina e quando l'ho fatto prima, il DB aveva problemi di prestazioni (in parte a causa dell'Id).
Mi è venuta in mente la seguente struttura di classe. Ha un int
ID, quindi un Guid
per l'identificazione esterna. Il problema con questo è che ora significa che ci sono chiamate eccessive al db per inserimenti e aggiornamenti.
Modelli:
public class Blog
{
public int BlogId { get; set; }
public Guid BlogGuid { get; set; } = Guid.NewGuid();
public string Url { get; set; }
public List<Post> Posts { get; set; }
}
public class Post
{
public int PostId { get; set; }
public Guid PostGuid { get; set; }
public string Title { get; set; }
public string Content { get; set; }
public int BlogId { get; set; }
public Blog Blog { get; set; }
}
DTO:
public class BlogDto
{
// No int id on dto
public string Url { get; set; }
public Guid BlogGuid { get; set; }
public List<PostDto> Posts { get; set; }
}
public class PostDto
{
// No int id on dto
public Guid PostGuid { get; set; }
public string Title { get; set; }
public string Content { get; set; }
public BlogDto Blog { get; set; }
}
Ottenere i dati va bene. Come prima, otteniamo e convertiamo in DTO.
Quando si desidera eseguire un aggiornamento o inserire, i dati tornano con solo gli ID guida su tutti gli oggetti. Non posso semplicemente inviare le entità indietro, come fanno nei tutorial come questo .
Ora ho bisogno di ottenere i dati originali (da Guid, con include), quindi ho bisogno di ottenere i dati relativi (da Guid) e capire cosa fare (qualcosa potrebbe essere stato inserito, cancellato o semplicemente modificato) . Sembra tutto un po 'disordinato e inutilmente loquace con il database.
Questo è solo un caso di più sicuro = più lento, o questo disegno (come sospetto) è in qualche modo inefficiente?