1

サブカテゴリを持つ自己参照エンティティ カテゴリがあります。それは非常にうまく機能します。

JsTree ヘルパーを実装したいのですが、同様の構造を使用する別のプロジェクトがあるため (Category は両方のプロジェクトで 100% 類似したエンティティです)、クラス ライブラリにヘルパーを実装し、両方で利用できるようにしたいと考えています。

これは Entity Framework によって生成されたコードです。ここでは変更はありません。

[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 を実装する Category の別の部分クラスを追加しました。

    public partial class Category : ICategory
{
}

問題は、次のコンパイル エラーが発生することです。

エラー 6 'MyProject.EntityFramework.Models.Category' はインターフェイス メンバー 'ICategory.Subcategories' を実装していません。'MyProject.EntityFramework.Models.Category.Subcategories' は、'System.Data.Objects.DataClasses.EntityCollection < ICategory >' の一致する戻り値の型がないため、'ICategory.Subcategories' を実装できません。

この問題を解決するアイデアはありますか? 私は何を間違っていますか?カテゴリは ICategory を実装しているので、ICategory 内のサブカテゴリ (ICategory コレクション) は一致する必要がありますね。

私はEF 4.4を使用していますが、問題はそれとは関係がないと思います。前もって感謝します。

4

1 に答える 1

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>(); }
    }
}

これをテストして機能することを確認した後、回答を更新します。私はヘルパーを書いています。


これが機能することを確認するために編集します。

于 2012-10-14T15:14:57.700 に答える