我使用Entity Framework 6和Table-Per-Type繼承方法。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();
實體框架返回派生類型的數組。
即,keys[0]
可以是IntConfigurationKey
和keys[1]
可以是StringConfigurationKey
類型。我可以安全地轉換它並訪問派生類型的屬性。
這是一個很棒的功能,我喜歡它,但我想知道它是如何工作的,以便在將來保持此功能。
它使用枚舉或它是否在所有表中查找具有相同ID的實體?
這是對我的問題的完美和完整的答案:)謝謝。 –