假設我有User
及2個派生實體Student
,Teacher
。我使用了TPH方法,所以在課堂上我根本沒有任何財產來告訴我誰是老師。使用代碼優先實體框架篩選多個派生類
我有2個布爾應該允許我爲加載學生或教師像這樣:
//IQueryable<User>
var query = userRepository.GetUsers();
//Type filtering
if (searchModel.IsStudent)
{
query = query.OfType<Student>();
}
if (searchModel.IsTeacher)
{
query = query.OfType<Teacher>();
}
當這種嘗試計算,我得到的時候都是真此錯誤:
DbIsOfExpression requires an expression argument with a polymorphic result type that is compatible with the type argument.
我已經看過一些關於SO的答案,但它們適用於1種過濾類型。
然後,我會喜歡做這樣的事情(粗略編碼):
if(query.ToList().FirstOrDefault() is Student)
{
print "student";
}
映射:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<User>()
.Map<Teacher>(m => m.Requires("UserType").HasValue("Teach"))
.Map<Student>(m => m.Requires("UserType").HasValue("Stu"))
.Map<Staff>(m => m.Requires("UserType").HasValue("Staff"));
}
您能向我們展示您的課程嗎?你是先使用代碼嗎?任何你可以分享的映射代碼? –
什麼是查詢類型? –
@LadislavMrnka我增加了查詢類型 –