假設我有接口IApple
和實現它的類Apple
。另外,我有幾個班擴展Apple
(SpartanApple
,GreenApple
,等..)將對象動態投射到正確的子類
現在,我有以下功能將處理加入蘋果到我的數據庫:
public void CreateApple(IApple apple)
{
...
db.Apples.Add(apple); // This will take an object of type Apple, or ANY of its sub-types
db.SaveChanges();
}
的問題是db.Apples.Add(apple);
將爲下列編譯時錯誤
Argument 1: cannot convert from 'IApple' to 'Apple'
所以我需要它傳遞給Add()
前投apple
爲適當的類型。我可以通過使用if語句並根據某些屬性將apple
轉換爲適當的類型來實現,但是我不希望每次在將來添加新的子類時都必須添加新的情況。
我覺得我在這裏錯過了一些微不足道的東西。有沒有更優雅的方式來做到這一點?任何幫助,將不勝感激。
一般提示 - 如果您需要沮喪,您的設計可能是錯誤的。 –
您是否嘗試將其轉換爲「Apple」? 'db.Apples.Add((Apple)apple);'EF應該在'Add'方法中正確地找出實際的類型。 – MarcinJuraszek
@MarcinJuraszek你是對的。我試過了,它就是這麼做的。如果您將此作爲答案發布,我會接受它。謝謝! – Sadiq