Предполагая, что у меня есть данные модели, определенные как это:C# - Entity Framework кода первая - карта объекта на две таблицы
class Geometry
{
public ICollection<Point> Points { get; set; }
}
class Point
{
public int X { get; set; }
public int Y { get; set; }
}
Я хотел бы, чтобы отобразить его в следующих таблицах базы данных:
GeometriesTable
-- [GeometryId] int, key
-- [GeometryData] <-- a BLOB here!!!
PointsTable
-- [PointId] int, key
-- [GeometryId] int, foreign key
-- [X] int
-- [Y] int
My [GeometryData]
BLOB в основном состоит из идентификаторов точек, которые составляют геометрию и пару дополнительных метаинформаций.
Принимая мету вещь прочь, этот BLOB-бы выглядеть следующим образом:
[ 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 ]
(то есть (N + 1) * 4 байта для каждого BLOB.)
BLOB используется (вместо простое отношение «один ко многим») для нескольких причин производительности. Это то, что нельзя изменить.
Я создал следующие объекты спроецировать модель:
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; }
}
Теперь, если у меня есть некоторые IEnumerable<Geometry>
Я хотел бы иметь возможность заполнить таблицы (а DbSet<GeometryEntity>
и DbSet<PointEntity>
). Конкретная проблема заключается в том, что я не знаю, как назначить идентификаторы точек из PointsTable
в соответствующие идентификаторы точек в моих BLOB-объектах геометрии.
Любые идеи о том, как такое отображение может быть разрешено?
что именно вы подразумеваете под * конкретный EF осуществление *?Я совершенно новичок в EF и очень ценю совет: – bashis
@bashis Хорошо, получилось: я попытаюсь расширить этот ответ, добавив контекст EF –
Думаю, вам нужно переопределить конфигурацию.Seed для заполнения таблиц и я добавил указатель на предоставленные геометрии в качестве отправной точки в моем редактировании. –