У меня есть схема устаревшей базы данных, которую я хотел бы моделировать с помощью сопоставления структуры Entity Framework для каждого типа. Однако в таблице базовых таблиц и подкласса используются разные имена для первичного ключа, и EF, похоже, не нравится.Модель данных типа Table-Per-Type с разными именами клавиш?
Например:
[Table("People")]
abstract class Person {
[Key, Column("Id")]
public int Id { get; set; }
// Person properties...
}
[Table("Employees")]
class Employee : Person {
[Key, Column("PersonId")]
public new int Id { get; set; }
// Employee-specific properties...
}
Это на самом деле работает, по крайней мере, для чтения: Employee
отображается на запись из таблицы People
плюс записи из Employees
таблицы. Однако Entity Framework не заполняет Employee.Id
(он всегда равен нулю), поэтому я прибегал к аннотации Employee.Id
как [Obsolete]
, чтобы убедиться, что остальная часть моего кода не пытается его использовать.
Я боюсь, что использование new
таким образом кажется ужасным взломом.
Есть ли более идиоматический/правильный способ сделать это?
На самом деле самое страшное в том, что код Linq-to-entities _has_ использует (новое) свойство 'Id', но не-код базы данных _cannot_ использует свойство' Id'. Тьфу. – andrewf
У меня есть решение (см. Ниже), но, возможно, это просто обход. Другие идеи приветствуются. – andrewf