Аннотация модели Entity Framework CoreC#

Место общения программистов C#
Ответить
Anonymous
 Аннотация модели Entity Framework Core

Сообщение Anonymous »

Я хочу реализовать в своем проекте миграцию для политик безопасности на уровне строк. Идея состоит в том, чтобы пометить модель аннотацией, затем перехватить генерацию миграции и сгенерировать некоторый SQL для обеспечения безопасности на уровне строк.
В моем DbContext.OnModelCreating у меня есть следующий код:

Код: Выделить всё

modelBuilder.Entity()
.HasAnnotation("TenantIsolationPolicy", new RlsPolicy(...));

Код: Выделить всё

RlsPolicy
 — это класс, содержащий данные, необходимые для генерации SQL (название политики, к кому она применяется, тип политики...)
Тогда у меня есть пользовательский ModelDiffer, который обрабатывает «бизнес-логику» чтения данных аннотаций и генерации SQL на их основе. Я могу собрать код, но получаю сообщение об ошибке при попытке добавить миграцию: невозможно создать литералы C# типа «XYZ.RlsPolicy». Поставщик должен реализовать CoreTypeMapping.GenerateCodeLiteral для поддержки его использования во время разработки.
На основе https://learn.microsoft.com/en-us/dotnet/api/ microsoft.entityframeworkcore.metadata.builders.indexbuilder-1.hasannotation?view=efcore-5.0 Я ожидал, что смогу передать класс в качестве второго параметра, а затем в другом параметре. Я использую такой код для безопасного доступа к данным:

Код: Выделить всё

var sourceTableAnnotation = entityType.GetAnnotations()?.FirstOrDefault(x => x.Name == "TenantIsolationPolicy");

if (sourceTableAnnotation != null &&
sourceTableAnnotation.Value is RlsPolicy sourcePayload)
{
...
}
Я использую EntityFrameworkCore 5.0.9 и Npgsql 5.0.7
Я предполагаю, что данные из метода OnConfiguring передаются в пользовательская модель отличается неправильно?

Подробнее здесь: https://stackoverflow.com/questions/792 ... annotation
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»