В EF Core возможно ли сохранить атрибут сущности с несвязанным типом? - PullRequest
0 голосов
/ 11 июня 2018

Я создаю сайт AspNet Core 2.1.Моя модель данных включает в себя Patient Class:

public class Patient
{
    public int Id { get; set; }
    public string Name { get; set; }
    public DateTime DateOfBirth { get; set; }
}

Теперь я хочу, чтобы код моего приложения обрабатывал Name и DateOfBirth как string и DateTime соответственно, , но в базовой таблицеЯ хочу, чтобы оба значения хранились в виде строки.

  1. Может кто-нибудь указать мне на конкретные атрибуты аннотации данных или магию Fluent API, которая позволяет мне скопировать свойство POCO (класс сущности) вНЕПРАВИЛЬНЫЙ тип столбца базы данных (т. е. сопоставление DateOfBirth со строковым столбцом базы данных [NVARCHAR]) и

  2. После того, как я правильно определил столбец базы данных, EF Core дает мнеточку расширения, чтобы легко вставить свой собственный код для перевода между типом POCO и типом столбца базы данных?

Зачем мне это делать (я слышу ваш вопрос)?Потому что мой сайт хранит конфиденциальную информацию, и я следую рекомендациям GDPR и внедряю схему псевдонимовТаблица базы данных за классом Patient не хранит фактические данные.Скорее, он хранит ключи, которые идентифицируют данные, в отдельной базе данных «хранилища».Мой сайт имеет отдельный сервер "хранилище" с интерфейсом API, который хранит пары ключ / значение.Доступ к серверу хранилища разрешен только авторизованным абонентам, и все обращения регистрируются.

Итак, я хочу сохранить «ключи» (строки) в базе данных веб-сайта и иметь некоторое промежуточное программное обеспечение, которое взаимодействует с хранилищемAPI для преобразования между фактическими значениями (из хранилища) и ключами (из базы данных сайта).

Но, конечно, я хочу, чтобы код веб-сайта не знал об этой механике промежуточного программного обеспечения.Код веб-сайта должен видеть свойства класса POCO как обычные, строго типизированные члены.Весь перевод Type хочет обрабатываться промежуточным ПО.

1 Ответ

0 голосов
/ 11 июня 2018

Использование Преобразование значений .

Преобразователи значений позволяют преобразовывать значения свойств при чтении из базы данных или записи в нее.Это преобразование может быть из одного значения в другое того же типа (например, шифрование строк) или из значения одного типа в значение другого типа (например, преобразование значений перечисления в и из строк в базе данных.)

Например:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Patient>(builder => 
    {
        builder
            .Property(p => p.DateTime)
            .HasConversion(new DateTimeToStringConverter());
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...