Song
hat eine viel zu viele Beziehung mit sich. Ich speichere diese IDs in einer Klasse namens SimilarVersion
mit beiden ID-Spalten.ASP.NET MVC So greifen Sie auf den von Entity Framework generierten Fremdschlüssel zu?
public class Song
{
public int Id { get; set; }
public string AudioName { get; set; }
public string ArtistName { get; set; }
...
public virtual ICollection<SimilarVersion> SimilarVersions { get; set; } = new List<SimilarVersion>();
}
public class SimilarVersion
{
public int Id { get; set; }
public int? Song_Id1 { get; set; }
}
Ansicht Modelle:
public class SongDto
{
public int Id { get; set; }
public string AudioName { get; set; }
public string ArtistName { get; set; }
...
public ICollection<SimilarSongDto> SimilarSongDtos { get; set; } = new List<SimilarSongDto>();
}
public class SimilarSongDto
{
public int Id { get; set; }
public string AudioName { get; set; }
public string ArtistName { get; set; }
...
}
Die SimilarVersion
Tabelle in meiner Datenbank hat jetzt Id
, Song_Id
, Song_Id1
, wie EF Song_Id erzeugt hat. Wie kann ich diese EF-generierte Spalte in meinem Code verwenden?
_similarVersionService.GetSimiliarVersion().Song_Id
wird mir einen Fehler geben, weil es keine Eigenschaft in der Klasse namens das gibt. Ich könnte es manuell zur Klasse hinzufügen, wie ich es mit Song_Id1
getan habe, und die Sammlung aus der anderen Klasse entfernen, aber ich denke, ich muss etwas falsch machen. Bitte sagen Sie mir auch, ob es eine bessere Möglichkeit gibt, dies zu kartieren.
Ich habe versucht, public int Song_Id { get; set; }
hinzuzufügen und es machte nur eine andere Spalte in meiner Tabelle Song_Id2
genannt.
Bearbeiten. Der Versuch, eine Zeile basierend auf Admir Antwort hinzuzufügen:
var songToUpload = new Song
{
AudioName = uploadSongDtos[i].AudioName.Trim(),
ArtistName = uploadSongDtos[i].ArtistName,
};
foreach (var compareAgainstString in _songService.GetSongs().ToDictionary(x => x.Id, x => x.AudioName))
{
var score = SearchContext.Levenshtein.iLD(songToUpload.AudioName, compareAgainstString.Value);
//Don't add the current song
if (score < 50 && songToUpload.Id != compareAgainstString.Key)
songToUpload.SimilarVersionsWhereSimilar.Add(new SimilarVersion { SimilarId = compareAgainstString.Key });
}
Beide OriginalId
und SimilarId
zugeordnet sind, was auch immer die ID von songToUpload.Id
ist die Beziehung, die wir in den Modellen definiert gegeben, die für OriginalId
korrekt ist, aber es ist auch zwingend Mein Custom Set SimilarId
oben. Wie kann ich das stoppen?
Danke für die Antwort. Ich habe versucht, eine Zeile in die 'SimilarVersion' Tabelle mit Ihrer Antwort hinzuzufügen, aber es funktioniert nicht wie erwartet. Ich habe meine ursprüngliche Frage bearbeitet, um das Problem zu zeigen. Ich verstehe auch nicht, warum wir 'public virtual Song Original' und' public virtual Song Similar' in der 'Similarity' Tabelle brauchen. Ich denke, vielleicht implementiere ich es falsch. –