Как реализовать ограничение базы данных в классе C# Entity Framework (EF), который применяет стратегию таблицы для конкрC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как реализовать ограничение базы данных в классе C# Entity Framework (EF), который применяет стратегию таблицы для конкр

Сообщение Anonymous »

Описание < /h2>
Уважаемая All, < /p>
У меня есть веб -приложение C osp net Core, которое использует стратегию таблицы для конкретного типа (TPC) в его структура базы данных. < /p>
Для простоты допустим, что мое приложение имеет исключительно 3 таблицы: A, B и c. < /p>
относительно таблицы A, Он имеет два столбца (C1 и C2), а также уникальный столбец идентификатора (с именем «ID»). C1 является нулевым столбцом Dateonly; C2-это не нулеваемый столбец Dateonly. Таким образом, из обсуждения опущены. Таблицы B и C сопоставлены с классами «class_b» и «class_c», соответственно. Наконец, class_b и class_c являются прямыми потомками class_a. < /P>
ограничение < /h2>
Один из моих бизнес -случаев подразумевает ограничение базы данных над таблицей A. C1 должен быть больше, чем C2, когда C1 не является нулевым. < /P>
Вопрос < /h2>
Учитывая вышеупомянутый контекст, как можно реализовать ограничение на Table_a, используя беглый API во время создания моделей? Это ограничение должно быть непосредственно применимым и наследственным его потомками. Между тем, документация Microsoft не ссылается на какое -либо потенциальное конфликт ограничений (см. Здесь) из -за стратегии TPC (см. Здесь, здесь и здесь).
реализация ограничения (пример кода) >
namespace MyApplication.DataPersistance

public class Class_A
{

public DateOnly? C1 {get;set;}

public DateOnly C2 {get;set;}
}

public class Class_B: Class_A
{

// ... other properties
}

public class Class_C: Class_A
{

// ... other properties
}

public class ApplicationDbContext: IdentityDbContext
{
public DBSet A {get;set;}

public DBSet B {get;set;}

public DBSet C {get;set;}

// ... other tables

public ApplicationDbContext(DbContextOptions options)
: base(options)
{

}

protected override void OnModelCreating(ModelBuilder modelBuilder)
{

base.OnModelCreating(modelBuilder);

modelBuilder.Entity(entity=>{

entity.ToTable(b => b.HasCheckConstraint("CK_Class_A_C1_gt_C2", "[C1] > [C2]"));
entity.UseTpcMappingStrategy();
});

modelBuilder.Entity(entity=>{
});

modelBuilder.Entity(entity=>{
});

// ... configuration of other tables ...

}

}

< /code>
Заключение < /h3>
Пока что стратегия TPC, по -видимому, имеет некоторые ограничения в отношении реализаций ограничения базы данных. Тем не менее, я хочу узнать мнение и опыт сообщества Stackoverflow в этой теме.
Искренне,

Подробнее здесь: https://stackoverflow.com/questions/794 ... work-ef-cl
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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