2012-10-14 15 views
1

我有一個自引用的實體類別,它具有子類別。它工作得很好。實體框架數據庫首先,自引用實體層次結構的接口

現在我想實現一個JsTree助手,但因爲我有另一個使用類似結構的不同項目(類別在兩個項目中都是100%相似的實體)我想在類庫中實現助手,可用於兩者。

這是由實體框架生成的代碼,在這裏沒有改變:

[EdmEntityTypeAttribute(NamespaceName="MyModel", Name="Category")] 
[Serializable()] 
[DataContractAttribute(IsReference=true)] 
public partial class Category : EntityObject 
{ 
    /// <summary> 
    /// No Metadata Documentation available. 
    /// </summary> 
    [XmlIgnoreAttribute()] 
    [SoapIgnoreAttribute()] 
    [DataMemberAttribute()] 
    [EdmRelationshipNavigationPropertyAttribute("MyModel", "FK_Categories_Categories", "Categories1")] 
    public EntityCollection<Category> Subcategories 
    { 
     get 
     { 
      return ((IEntityWithRelationships)this).RelationshipManager.GetRelatedCollection<Category>("WebDirectoryModel.FK_Categories_Categories", "Categories1"); 
     } 
     set 
     { 
      if ((value != null)) 
      { 
       ((IEntityWithRelationships)this).RelationshipManager.InitializeRelatedCollection<Category>("MyModel.FK_Categories_Categories", "Categories1", value); 
      } 
     } 
    } 
} 

這是我寫的接口:

public interface ICategory 
{ 
    System.Int32 CategoryId { get; set; } 
    System.String DefaultName { get; set; } 
    EntityCollection<ICategory> Subcategories { get; set; } 
} 

然後我又增加了部分類分類實施ICategory :

public partial class Category : ICategory 
{ 
} 

問題是,我得到以下編譯e rror:

Error 6 'MyProject.EntityFramework.Models.Category' does not implement interface member 'ICategory.Subcategories'. 'MyProject.EntityFramework.Models.Category.Subcategories' cannot implement 'ICategory.Subcategories' because it does not have the matching return type of 'System.Data.Objects.DataClasses.EntityCollection < ICategory > '.

任何想法來解決這個問題?我究竟做錯了什麼?類別正在實施ICategory,因此ICategory中的子類別(ICategory集合)應該匹配,是不是?

我使用EF 4.4,但我認爲問題與此無關。提前致謝。

回答

0

看來我已經解決了它,我還沒有運行該應用程序,但它編譯和合理。這是從來就做什麼:

ICategory更通用的,也只有消氣,我不需要二傳手:

public interface ICategory 
{ 
    System.Int32 CategoryId { get; set; } 
    System.String DefaultName { get; set; } 
    IEnumerable<ICategory> Subcategories { get; } 
} 

則部分類類別:

public partial class Category : ICategory 
{ 
    IEnumerable<ICategory> ICategory.Subcategories 
    { 
     get { return Subcategories.Cast<ICategory>(); } 
    } 
} 

我在我測試這個以確認它能正常工作後會更新答案。我正在寫幫手。


我編輯以確認這是有效的。