Страницы

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

воскресенье, 1 марта 2020 г.

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

#c_sharp #entity_framework


В домене приложения есть объект/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.

Как мне описать подобную структуру на уровне работы с базой данных?
    


Ответы

Ответ 1



Конечно, это возможно. Создавая новый проект, я думал, придётся либо с атрибутами помудрить, либо флюэнт-интерфейс заюзать. Но для начала я создал заготовку следующего вида: 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) ); Даже не пришлось ничего делать.

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

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