tôi có các loại sau:Truy vấn theo loại cơ sở trong EF4 Code-First
public abstract class Vehicle {
public int Id { get; set; }
public double TopSpeed { get; set; }
}
public class Car : Vehicle {
public int Doors { get; set; }
}
public class Motorcycle : Vehicle {
public string Color { get; set; }
}
Và tôi có một DBContext mã đầu tiên:
public MyDbContext: DbContext {
public DbSet<Car> Cars { get; set; }
public DbSet<Motorcycle> Motorcycles { get; set; }
}
này hoạt động tuyệt vời nếu tôi truy vấn cho một chiếc xe hoặc moto trực tiếp ...
var dbContext = new MyDbContext();
var cars = dbContext.Set<Car>().Where(x=> x.TopSpeed>10); // <-- THIS WORKS
Nhưng nếu tôi muốn có một danh sách của tất cả các loại xe, cho dù xe hơi hoặc xe máy, tôi muốn làm điều này:
var dbContext = new MyDbContext();
var vehicles = dbContext.Set<Vehicle>().Where(x=> x.TopSpeed>10); // <-- THIS DOES NOT WORK
Khi tôi cố gắng đoạn mã trên, tôi nhận được một ngoại lệ:
System.InvalidOperationException: Loại thực thể xe không phải là một phần của mô hình cho bối cảnh hiện nay.
Điều đó có ý nghĩa hoàn hảo ... Tôi không thêm Xe vào ngữ cảnh. Tôi đã thêm xe và moto. Tại thời điểm này, tôi không chắc chắn phải làm gì. Tôi đã thử thêm xe vào bối cảnh của tôi, nhưng kết hợp các bảng cho ô tô và xe máy vào một bảng xe. Tôi chắc chắn muốn có một bảng riêng biệt cho xe ô tô và motos (và có thể là một bảng cho các tài sản cơ sở xe là tốt). Cách tốt nhất để làm điều này là gì?
EF không phải là điều của tôi, nhưng bạn có thể có được một bộ thông qua giao diện nếu bạn thêm nó vào ngữ cảnh, ví dụ: thay đổi 'Xe' thành 'IVehicle'? – Eli