Редактировать
Если присмотреться к вашему примеру более подробно, я не думаю, что вы пытаетесь сделать возможным.Если вы пишете запрос к типу сущности BASE, то вы можете запрашивать только те поля, которые определены в базовом типе.
Поскольку "SomeProperty" не определено в LogEntry, вы не можете написать этот запрос:
var logEntries = db.LogEntry.Where(r => r.SomeProperty == "foo");
Поскольку SomeProperty не определено в классе LogEntry.
Если вы хотите писать запросы к базовому классу, вам нужно сделать что-то вроде следующего:
public class TPTContext : DbContext
{
public TPTContext() : base("name=TPT")
{ }
public DbSet<BillingDetail> BillingDetails { get; set; }
}
public abstract class BillingDetail
{
public int BillingDetailId { get; set; }
public string Owner { get; set; }
public string Number { get; set; }
}
[Table("BankAccounts")]
public class BankAccount : BillingDetail
{
public string BankName { get; set; }
public string Swift { get; set; }
}
[Table("CreditCards")]
public class CreditCard : BillingDetail
{
public int CardType { get; set; }
public string ExpiryMonth { get; set; }
public string ExpiryYear { get; set; }
}
Я написал следующий запрос к базовому классу:
TPTContext db = new TPTContext();
var allAccounts = db.BillingDetails.Where(b => b.Owner == "boran");
var bankAccounts = allAccounts.OfType<BankAccount>();
var creditCards = allAccounts.OfType<CreditCard>();
Кажется, у меня все работает нормально.