Ich versuche, eine 1-zu-1-Zuordnung in Entity Framework und ein Beispiel zu tun, fand ich online was here, look for the 'Configure One-to-One relationship using Fluent API section'Entity Framework 1-zu-1-Beziehung keine Ausnahme auslösen, wenn abhängige Einheit null ist
Die meisten der Beispiele online ist ähnlich wie der Link ... auch in einigen Büchern, die ich gelesen habe, als ich versuchte, dies zu implementieren.
Hier meine Einheiten sind:
public class Student
{
public Student() { }
public int StudentId { get; set; }
public string StudentName { get; set; }
public virtual StudentAddress Address { get; set; }
}
public class StudentAddress
{
public int StudentId { get; set; }
public string Address1 { get; set; }
public string Address2 { get; set; }
public string City { get; set; }
public int Zipcode { get; set; }
public string State { get; set; }
public string Country { get; set; }
public virtual Student Student { get; set; }
}
Mein Datenkontext, die Konfiguration mit dem fließend api umfasst:
public class DataContext : DbContext
{
public DbSet<Student> Student { get; set; }
// public DbSet<StudentAddress> Addresses { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
// Configure StudentId as PK for StudentAddress
modelBuilder.Entity<StudentAddress>()
.HasKey(e => e.StudentId);
// Configure StudentId as FK for StudentAddress
modelBuilder.Entity<Student>()
.HasRequired(s => s.Address)
.WithRequiredPrincipal(ad => ad.Student);
}
}
class Program
{
static void Main(string[] args)
{
using (var context = new DataContext())
{
var student = new Student { StudentName = "sample name" };
context.Student.Add(student);
context.SaveChanges();
}
Console.ReadKey();
}
}
in der Konsolenanwendung erwarte ich, dass es eine Ausnahme auslösen, da ein Schüler haben muss eine StudentAddress, damit sie gespeichert wird, aber wenn ich die Anwendung ausgeführt und die Datenbank überprüft habe, wurde der Schülereintrag tatsächlich gespeichert. Ich könnte etwas unter der Haube vermissen ... wenn ich jedoch versuche, das [Required] -Attribut oberhalb der StudentAddress-Eigenschaft der Student-Klasse hinzuzufügen, löst es eine Exception aus, wenn ich keine StudentAddress für eine Student-Entität bereitstelle.
Ihr Feedback/Ihre Hilfe wäre sehr hilfreich und würde sehr geschätzt werden. Vielen Dank!
Sie haben es rückwärts. Eine StudentAddress muss einen Studenten haben. Wenn zum Erstellen eines Schülers eine StudentAddress erforderlich ist, liegt ein Problem vor, da StudentID zum Erstellen einer StudentAddress benötigt wird. Wenn beide ausgefüllt werden müssen und die Beziehung 1 zu 1 ist, sollte es wahrscheinlich nur eine einzige Tabelle sein.In Wirklichkeit sollte jede Art von Personen-/Adressbeziehung eine 1 zu viele Beziehung sein, da es viele Leute mit mehr als 1 Adresse gibt. –
Sieht so aus, als ob die Validierung nicht mit Fluent API konfiguriert werden kann. –
@DavidCram Nein, was ich versuche zu tun ist, beide Enden benötigt ... bedeutet, dass Sie nicht einen Studenten ohne eine Adresse einfügen können oder umgekehrt (obwohl es nur in EF ist, weil Sie das nicht in SQL tun können) Wie auch immer, was passiert, wenn Sie SaveChanges aufrufen, wird eine Ausnahme ausgelöst? –