Da EF keine Listen mit primitiven Typen speichern kann, habe ich ein Day-Objekt erstellt, das nur eine Enum von 1-7 enthält und die Methode migration seed zum Füllen der Datenbank verwendet. So in der Datenbank-Tabelle habe ich die Werte 1 bis 7.Verwenden von Listen primitiver Typen in EF
public class Day
{
[Key]
public Days DayOfWeek { get; set; }
public virtual ICollection<SalaryAddition> SalaryAdditions { get; set; }
}
Ich habe die Verbindung zwischen SalaryAddition und Tag in meinem OnModelCreating gesetzt.
modelBuilder.Entity<SalaryAddition>()
.HasMany(s => s.Days)
.WithMany(s => s.SalaryAdditions)
.Map(ss =>
{
ss.MapLeftKey("SalaryAdditionId");
ss.MapRightKey("SalaryAdditionDay");
ss.ToTable("SalaryAdditionDays");
});
Mein Problem ist, dass für mich einen Tag meines SalaryAddition Objekt hinzufügen ich es aus der Datenbank laden muß. Aber was ich will, ist nur etwas tun, wie folgt aus:
salaryAddition.Days.Add(new Day{DayOfWeek = Days.Monday});
Also brauche ich keine Nummer mit der Nummer aus der Datenbank zu laden.
Aber wenn dies zu tun, erhalte ich: Violation of PRIMARY KEY constraint 'PK_dbo.Days'. Cannot insert duplicate key in object 'dbo.Days'.
Warum nicht eine Flagge Enum, wo jeden Tag als eine Potenz von 2 dargestellt wird, und speichern dass in "SalaryAddition" stattdessen, wie ich annehmen würde, Sie eine 'SalaryAddition' am selben Tag mehr als eine nicht zuordnen möchten. – juharr
Das klingt genial! Aber wie würdest du es im Code machen? – Jeggy
Ich denke, das ist ein großartiger Vorschlag, obwohl die Viele-zu-Viele auch Duplikate verhindern würden (jede Kombination 'SalaryAddition',' Day' ist einzigartig). –