我會直接用代碼,然後解釋我的問題,這樣會更容易。爲了給擡起頭,我使用實體框架7與SQL Server 2014 ASP.NET 5和6 MVCSQL Server查詢創建不同的返回類型
所以,我下面的類:
public class Base {
public int BaseId { get; set; }
public string Name { get; set; }
}
public class DerivedOne : Base {
public virtual List<OtherDBObject> ListOne { get; set; }
}
public class DerivedTwo : Base {
public string SomeContent { get; set; }
}
我創建存儲庫retrievs數據庫中的基礎對象。問題是,DerivedOne和DerivedTwo擁有不同的成員 - 我如何知道要返回哪種類型(哪些成員要進一步查詢)?
public class Repo : IRepo {
public async Task<Base> GetById(int id) {
// I though that this method should work something like this (its pseudo code) :
context.Base.Where(b => b.BaseId == id)
.switch(obj.type) {
case DerivedOne : query for OtherDBObjects
case DerivedTwo : query for string content somewhere else
...
}).First();
}
}
我的目標是擁有僅包含幾個基本的領域和派生的人可以完全不同勢非常抽象基類。
PS如果您對此任務有不同的結構,請隨時發佈!
我不能完全確定你想做什麼在這裏,但不能只是查詢Base對象,然後查看獲取的對象是DerivedOne類型還是DerivedTwo類型? –
嗯,是的,但它會被分成兩個查詢數據庫 - 一個獲取基地,然後檢查它的類型,然後查詢派生類的內容。我認爲將一個查詢比兩個查詢更好 - 開銷要小得多。 –
基於對象類型檢查的控制流程=非常糟糕的設計。 –