В домене приложения есть объект/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
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)
);
Даже не пришлось ничего делать.
Комментариев нет:
Отправить комментарий