Ich habe eine Eins-zu-viele konfigurieren Beziehung zwischen Entitäten Curve und Point, wie folgt definiert:Wie man einen zusammengesetzten Primärschlüssel enthält einen Fremdschlüssel (EF Fluent API)
public class Curve
{
public Curve()
{
Points = new HashSet<Point>();
}
public int CurveId { get; set; }
public string Name { get; set; }
public virtual ICollection<Point> Points { get; set; }
}
Und:
public class Point
{
public int Point_Num { get; set; }
public int CurveId { get; set; }
public double XCoord { get; set; }
public double YCoord { get; set; }
public virtual Curve Curve { get; set; }
}
In meinem Kontextklasse, konfiguriere ich die Schlüssel und Navigationseigenschaften wie folgt (beachten Sie, dass die Punkt Unternehmen einen zusammengesetzten Primärschlüssel hat):
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Curve>()
.HasKey(c => c.CurveId);
modelBuilder.Entity<Point>()
.HasKey(p => new { p.Point_Num, p.CurveId });
modelBuilder.Entity<Point>()
.HasRequired(p => p.Curve)
.WithMany(c => c.Points)
.HasForeignKey(p => p.CurveId);
}
Irgendwo anders im Code, bevölkern ich die Datenbank:
var curve = new Curve
{
Name = "curve 1"
};
var points = new List<Point>();
points.Add(new Point
{
XCoord = 1d,
YCoord = 1d,
});
points.Add(new Point
{
XCoord = 2d,
YCoord = 2d,
});
foreach (var point in points)
{
curve.Points.Add(point);
}
using (var dbCtxt = new MyDbContext())
{
try
{
dbCtxt.Curves.Add(curve);
dbCtxt.SaveChanges();
}
catch (Exception e)
{
Console.WriteLine(e.StackTrace);
}
}
ein Fehler ausgelöst wird, wenn Savechanges() aufgerufen wird „Ein Fehler ist aufgetreten, während die Einträge zu aktualisieren.“
Wenn ich Point_Num als Primärschlüssel der Point-Entity definiere, werden alle Entitäten problemlos aktualisiert. Es scheint, als ob das Problem von der Tatsache herrührt, dass der zusammengesetzte Primärschlüssel (Point_Num, CurveId) einen Fremdschlüssel (CurveId) enthält.
Ich kann das nicht verstehen, da ist eindeutig etwas, was mir fehlt. Jede Hilfe wird sehr geschätzt!