我正在構建WebApi2項目以公開一些RESTful服務。假設我有以下模型對象。未使用EF的WebApi字段過濾
public class Person
{
public string Name { get; set; }
public DateTime? Birthdate { get; set; }
public int Status { get; set; }
public List<Account> Accounts { get; set; }
}
public class Account
{
public decimal Amount { get; set; }
public string Code { get; set; }
public DateTime Expiry { get; set; }
}
在我的服務中,我必須去2個不同的系統檢索個人的數據和人的帳戶信息。顯然,服務的實現看起來像
[HttpGet]
[Route("Person/{id:int}")]
public IHttpActionResult Get(string id)
{
var person = new Person();
person = GetPersonFromSystemA(id);
if (person.Status == 2)
{
person.Accounts = GetPersonAccountsFromSystemB(id);
}
return this.Ok(person);
}
我不能在這種情況下使用EF可言,所以的OData是非常棘手的。
我有一些要求,我需要提供過濾功能的服務客戶端。客戶可以決定返回哪些對象字段,這也意味着如果客戶端不想包含該人員的賬戶信息,我應該跳過第二次調用系統B以避免整個子對象。
我做了一些快速搜索,但我找不到一些類似的解決方案。我知道我可以實現我自己的過濾語法,並讓所有自定義代碼使用過濾(通過有很多if/else)。
我在尋找更優雅的解決方案的一些想法。
感謝您的評論,您的實現假設我必須首先獲取所有數據,無論它們是否有用,然後應用過濾。如果EF/OData實現使用延遲加載,則根本不會加載過濾出的日期。我也嘗試實現類似的功能來加載我需要的數據,因爲調用外部系統很昂貴。 – hardywang