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 的 Category 添加了另一个部分类:

    public partial class Category : ICategory
{
}

问题是我收到以下编译错误:

错误 6“MyProject.EntityFramework.Models.Category”未实现接口成员“ICategory.Subcategories”。“MyProject.EntityFramework.Models.Category.Subcategories”无法实现“ICategory.Subcategories”,因为它没有匹配的返回类型“System.Data.Objects.DataClasses.EntityCollection < ICategory >”。

有什么想法可以解决这个问题吗?我究竟做错了什么?类别正在实施 ICategory 所以 ICategory 中的子类别(ICategory 集合)应该匹配,不是吗?

我正在使用 EF 4.4,但我认为问题与此无关。提前致谢。

4

1 回答 1

0

看来我已经解决了,我还没有运行应用程序,但它可以编译并且有意义。这就是我所做的:

ICategory 更通用,也只有 getter,我不需要 setter:

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

然后是部分类Category:

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

在我测试它以确认它有效后,我会更新答案。我正在写助手。


我编辑以确认这有效。

于 2012-10-14T15:14:57.700 回答