Angenommen, ich habe Datenmodell wie folgt definiert:C# - Entity Framework Code-first - Kartenobjekt in zwei Tabellen
class Geometry
{
public ICollection<Point> Points { get; set; }
}
class Point
{
public int X { get; set; }
public int Y { get; set; }
}
Ich möchte es in den folgenden Datenbanktabellen zur Karte:
GeometriesTable
-- [GeometryId] int, key
-- [GeometryData] <-- a BLOB here!!!
PointsTable
-- [PointId] int, key
-- [GeometryId] int, foreign key
-- [X] int
-- [Y] int
Meine [GeometryData]
BLOB besteht im Wesentlichen aus Punkte-IDs, die die Geometrie und ein paar zusätzliche Meta-Informationen bilden.
die Meta Sachen Wegnehmen, würden diese BLOBs wie folgt aussehen:
[ N (points count) - 4 bytes ]
[ Points[0].Id - 4 bytes ]
[ Points[1].Id - 4 bytes ]
[ Points[2].Id - 4 bytes ]
...
[ Points[N-1].Id - 4 bytes ]
(dh (N + 1) * 4 Byte für jedes BLOB.)
BLOB verwendet wird (statt eine einfache Eins-zu-viele-Beziehung) aus mehreren Leistungsgründen. Das ist etwas, das nicht geändert werden kann.
habe ich die folgenden Einheiten um das Modell zu projizieren:
class GeometryEntity
{
[Key]
[Column("GeometryId")]
public int Id { get; set; }
[Column("GeometryData")]
public byte[] Data { get; set; }
}
class PointEntity
{
[Key]
[Column("PointId")]
public int Id { get; set; }
[Column("GeometryId")]
public int GeometryId { get; set; }
[Column("X")]
public int X { get; set; }
[Column("Y")]
public int Y { get; set; }
}
Nun, vorausgesetzt, ich habe einige IEnumerable<Geometry>
ich die Tabellen in der Lage sein möchten, füllen (a DbSet<GeometryEntity>
und ein DbSet<PointEntity>
). Das spezielle Problem ist, dass ich nicht weiß, wie man Punkt-IDs von PointsTable
den entsprechenden Punkte-IDs in meinen Geometrie-BLOBs zuweist.
Irgendwelche Ideen, wie eine Zuordnung wie diese aufgelöst werden könnte? Jetzt
was genau meinen Sie mit * spezifischer EF-Implementierung *?Ich bin ziemlich neu zu EF selbst und würde wirklich einen Ratschlag schätzen – bashis
@bashis Ok, erhalten: Ich werde versuchen, diese Antwort zu erweitern, indem Sie den EF-Kontext –
Ich denke, Sie müssen die Configuration.Seed überschreiben, um die Tabellen zu füllen und ich habe einen Zeiger auf die bereitgestellten Geometrien als Ausgangspunkt für meine Bearbeitung hinzugefügt. –