Страницы

Поиск по вопросам

пятница, 17 мая 2019 г.

Сохранение композитного объекта в базе

В домене приложения есть объект/entity Place (Место) и есть у него среди других value object'ов – координаты на яндекс:карте (x,y и zoom карты):
public class Place { public int Id { get; set; }
public string Title { get; set; }
public YandexMapPoint Point { get; set; } }
public class YandexMapPoint { public float X { get; set; }
public float Y { get; set; }
public byte Zoom { get; set; } }
При этом я хочу, чтобы в базе это хранилось в одной таблице с полями Id, Title, x, y, zoom – и при чтении из базы разворачивалось обратно в доменный объект. А при сохранении доменного объекта – наоборот, складировалось в одну таблицу.
Я использую EF (EF6 или Core, не принципиально) Code First.
Как мне описать подобную структуру на уровне работы с базой данных?


Ответ

Конечно, это возможно. Создавая новый проект, я думал, придётся либо с атрибутами помудрить, либо флюэнт-интерфейс заюзать.
Но для начала я создал заготовку следующего вида:
using System; using System.Data.Entity; using System.Linq;
namespace ConAppEF { class Program { static void Main(string[] args) { using (var context = new MyContext()) { Console.WriteLine(context.Places.Count()); } } }
public class MyContext : DbContext { public DbSet Places { get; set; } }
public class Place { public int Id { get; set; } public string Title { get; set; } public YandexMapPoint Point { get; set; } }
public class YandexMapPoint { public float X { get; set; } public float Y { get; set; } public byte Zoom { get; set; } } }
После запуска было создана БД с такой таблицей:
CREATE TABLE [dbo].[Places] ( [Id] INT IDENTITY (1, 1) NOT NULL, [Title] NVARCHAR (MAX) NULL, [Point_X] REAL NOT NULL, [Point_Y] REAL NOT NULL, [Point_Zoom] TINYINT NOT NULL, CONSTRAINT [PK_dbo.Places] PRIMARY KEY CLUSTERED ([Id] ASC) );
Даже не пришлось ничего делать.

Комментариев нет:

Отправить комментарий