2014-03-18 22 views
0

我想實現一個通用的存儲庫,並且它失敗,因爲沒有從DBML對象到通用實體的隱式轉換。我不知道如何使IEML從IEntity繼承DBML對象,或者甚至是解決方案。通用存儲庫實現失敗,IEntity約束

下面是我使用的接口和存儲庫簽名。

public interface IEntity 
{ 
    int ID { get; } 
} 

public interface IRepository<T> : IDisposable 
{ 
    .... 
} 

public class Repository<T> : IRepository<T> where T : class, IEntity 
{ 
    .... 
} 

這是Model類。它在第9行出現錯誤(下面),其中存儲庫類的實例在構造函數中實例化。這只是在將IEntity約束添加到Repository類後纔開始發生的。

public class MyModel 
{ 
    DataContext DC; 
    Repository<MyType> MyRep; 

    public MyModel() 
    { 
     DC = new DataContext("ConnStr"); 
     MyRep = new Repository<MyType>(DC); 

    } 
} 

這裏是錯誤:類型不能用作泛型類型或方法中的類型參數'T'。沒有從'MyType'到'IEntity'的隱含參考轉換

在此先感謝您的幫助。

回答

1

它看起來像MyType沒有實現IEntity接口。

用編輯器打開你的DBML文件,並添加以下屬性:

EntityBase="IEntity" 

Database元素。

編輯:不知道是否可以使用UI編輯器。

+0

對,但是我該如何製作一個從自動生成的代碼創建的DBML類型實現IEntity? – Hoodlum

+0

哦,忘了其餘的。編輯答案! –

+0

在DBML文件中,我需要添加該語句嗎?在dbml.layout或designer.cs文件中? – Hoodlum

0

D.R.的答案在短期內解決了我的問題,但最終我實現了擴展DBML對象的部分類。這種方法解決了一些問題。首先,每次數據庫更改時都不必編輯DBML文件。其次,這使我能夠在需要時將其他擴展屬性和方法添加到DBML對象。