Tôi có một lớp cơ sở và hai lớp dẫn xuất.Entity Framework không truy vấn các lớp dẫn xuất - Lỗi trong DbOfTypeExpression
Mỗi lớp có nguồn gốc thực hiện cùng loại với thuộc tính - khác biệt duy nhất là tên thuộc tính.
Đáng buồn là tôi không có nhiều ảnh hưởng đến thiết kế lớp -> chúng đã được tạo từ tệp wsdl.
Sau đó tôi có thuộc tính trên BaseType để đóng gói thuộc tính chung. Kế hoạch là sử dụng tài sản này trong lần xem web của tôi, vv
Tôi đã sử dụng nổi tiếng "Fruit-Ví dụ" để chứng minh vấn đề:
public class FruitBase
{
public virtual int ID { get; set; }
//
// The plan is to use this property in mvc view
//
[NotMapped]
public virtual FruitnessFactor Fruitness
{
get
{
if (this.GetType().BaseType == typeof(Apple))
return ((Apple)this).AppleFruitness;
else if (this.GetType().BaseType == typeof(Orange))
return ((Orange)this).OrangeFruitness;
else
return null;
}
}
}
public class FruitnessFactor { }
Trong điều khiển MVC của tôi, các truy vấn sau đây làm việc hoàn toàn tốt :
return View(context.FruitEntities
.OfType<Apple>().Include(a =>a.AppleFruitness)
.ToList());
Nhưng cái này không:
return View(context.FruitEntities
.OfType<Apple>().Include(a =>a.AppleFruitness)
.OfType<Orange>().Include(o => o.OrangeFruitness)
.ToList());
thông báo lỗi tôi nhận được là :
DbOfTypeExpression yêu cầu đối số biểu thức có loại kết quả đa hình tương thích với đối số loại.
Tôi đang sử dụng EF 5.0 RC và phương pháp tiếp cận Mã đầu tiên.
Bất kỳ trợ giúp nào được đánh giá cao!
này có lẽ vì bạn biểu hiện ngụ ý 'Orange' là một' Apple' – Eranga
Tôi sẽ nghĩ bằng cách xác định FruitEntities của tôi là 'DbSet FruitEntities' biểu hiện ngụ ý rằng Orange và Apple là trái cây ?! –
Flo
Chuỗi 'OfType' nói:" Lọc tất cả táo từ FruitEntities và sau đó lọc từ kết quả tất cả táo là cam "chỉ có ý nghĩa nếu cam là táo, tức là lớp' Orange' thừa kế từ lớp 'Apple'. Bạn muốn đạt được điều gì với truy vấn đó? Danh sách kết hợp cam và táo, nghĩa là tất cả các loại trái cây là táo ** hoặc ** cam? – Slauma