1

我有一個域模型指定接口或我的域,我使用DI來將它連接到實體框架4存儲庫實現。在我的域名,我有以下:實體框架中的一對多關係中的接口繼承問題

public interface IInboundGateway : IGateway 
{ 
    ICollection<IInboundNumber> InboundNumbers { get; set; } 
} 

我則有已生成InboundGateway類我的實體框架模型:

public partial class InboundGateway : EntityObject 
{ 
    public EntityCollection<InboundNumber> InboundNumbers { get; set; } 
} 

爲了實現IInboundGateway inteface我創建了一個局部InboundGateway類。

public partial class InboundGateway : IInboundGateway 
{ 
} 

Eventhough EntityCollection <>實現ICollection的<>和InboundNumber實現IInboundNumber我正在一個錯誤報告InboundGateway沒有實現接口IInboundGateway.InboundNumbers因爲InboundGateway.InboundNumbers沒有匹配的返回類型ICollection<IInboundNumber>

我非常確定這是心理的EntityCollection不會實現ICollection和InboundNumber不會實現IInboundNumber。

任何幫助將大規模讚賞謝謝。

回答

1

您必須知道EntityCollection<InboundNumber>ICollection<InboundNumber>的子類型,但不是ICollection<IInboundNumber>的子類型。這些是2種不同類型,並且不相關。

所以在實體對象類,你必須:

public EntityCollection<InboundNumber> InboundNumbers { get; set; } 

雖然comopiler希望你有:

public ICollection<IInboundNumber> InboundNumbers { get; set; } 


如果你可以把你的EntityObjects到POCO,問題的一部分將自POCO課程默認使用ICollection作爲導航屬性解決。此外,您需要更改您的界面,如下所示:

public interface IInboundGateway : IGateway { 
    ICollection InboundNumbers { get; set; } 
} 
+0

當然,考慮到InboundNumbers也是繼承IinboundNumber意味着編譯器可以看到InboundNumber繼承IInboundNumber嗎?沒有? – 2010-11-05 19:37:14

+1

不,就像我說的,即使InboundNumbers實現了IInboundNumber,但不能返回需要ICollection 的ICollection 。請注意,*協變*不適用於泛型,這意味着列表不是列表的子類型。 – 2010-11-05 20:28:16