У меня проблема, связанная с ТПХ, я полагаю. Это сценарий:
У нас есть одна таблица с именем Artists, у которой есть некоторые свойства об исполнителях (например, имя, минибайо и т. Д.) И поле байтов, в котором биты используются для определения типа исполнителя, со значениями, такими как:
1 - Singer
2 - Actor
4 - Composer
8 - Musician
16 - Director
Обратите внимание, что один и тот же художник может быть только одного вида или принадлежать к нескольким. Давайте посмотрим пример:
+-------------------------------------------------+
| Table: Artist |
+---------------------------------------+---------+
| Name | Kind |
+---------------------------------------+---------+
| Al Pacino | 2 | (Actor)
+---------------------------------------+---------+
| Mel Gibson | 18 | (Actor and Director)
+---------------------------------------+---------+
| Dave Matthews | 15 | (Actor, Singer, Composer and Musician)
+---------------------------------------+---------+
Теперь я могу сделать TPH, используя обновляемые представления с хранимыми процедурами (для CRUD).
Я также знаю, что это невозможно (по крайней мере для меня!) Сделать это с помощью условного отображения, поскольку я не могу использовать выражение с побитовым ИЛИ, например, "(Kind | 2) = 2" в условии.
Я думал, альтернативно, что изменить структуру таблицы, разделив de field Kind на что-то вроде:
+-----------------------------------------------------------------------------------------+
| Table: Artist |
+---------------------------------------+-------+--------+----------+----------+----------+
| Name | Actor | Singer | Composer | Musician | Director |
+---------------------------------------+-------+--------+----------+----------+----------+
| Al Pacino | 1 | 0 | 0 | 0 | 0 |
+---------------------------------------+-------+--------+----------+----------+----------+
| Mel Gibson | 1 | 0 | 0 | 0 | 1 |
+---------------------------------------+-------+--------+----------+----------+----------+
| Dave Matthews | 1 | 1 | 1 | 1 | 0 |
+---------------------------------------+-------+--------+----------+----------+----------+
Может работать, но при этом, хотя я могу создать TPH, используя поля в условном отображении, EF (очевидно) выдает мне ошибку, утверждая, что производные сущности (Actor, Singer и т. Д.)
сопоставляется с теми же строками в таблице Artist.
У меня вопрос, есть ли другие способы сделать это?
Заранее спасибо.