Я использую Entity Framework 6 с подходом наследования на основе типа.Как EF6 знает производный тип?
Таблицы выглядеть следующим образом (только пример):
ConfigurationKeys
ID - int, not null, auto increment, primary
ConfigurationKeyType - int, not null
Key - varchar(50), not null
StringConfigurationKeys
ID - int, not null, primary (foreign key to ConfigurationKey.ID)
StringValue - varchar(50), not null
IntConfigurationKeys
ID - int, not null, primary (foreign key to ConfigurationKey.ID)
IntValue - int, not null
и следующая структура классов:
public enum ConfigurationKeyType
{
StringConfigurationKey = 0,
IntConfigurationKey = 1
}
[Table("ConfigurationKeys")]
public class ConfigurationKey
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }
public ConfigurationKeyType ConfigurationKeyType { get; set; }
public string Key { get; set; }
}
[Table("StringConfigurationKeys")]
public class StringConfigurationKey : ConfigurationKey
{
public string StringValue { get; set; }
}
[Table("IntConfigurationKeys")]
public class IntConfigurationKey : ConfigurationKey
{
public int IntValue { get; set; }
}
Никакие другие конфигурации и модели построитель отображения сделаны.
Теперь, когда я делаю следующий запрос:
var keys = context.ConfigurationKeys.ToArray();
Entity Framework возвращает массив производных типов.
I.e., keys[0]
может быть IntConfigurationKey
и keys[1]
может быть типа StringConfigurationKey
. Я могу безопасно использовать его и получить доступ к свойствам производных типов.
Это отличная функция, и мне она нравится, но я хотел бы знать, как она работает, чтобы поддерживать эту функциональность в будущем.
Использует ли он перечисление или ищет объект с одинаковым идентификатором во всех таблицах?
Это прекрасный и полный ответ на мой вопрос :) Спасибо. –