【问题标题】:EF Interfaces - getting object by related typeEF 接口 - 按相关类型获取对象
【发布时间】:2012-12-09 19:45:07
【问题描述】:

我正在尝试构建一组可重用的 EF 模型和接口。一个这样的接口称为ICategorised,如下所示:

public interface ICategorised {
    int CategoryID { get; set; }
    Category Category { get; set; }
}

Category 对象如下所示:

public class Category {
    public int CategoryID { get; set; }
    public string Title { get; set; }
    public Type Type { get; set; } // Is 'Type' the wrong type for this?
    public string Description { get; set; }
}

我非常喜欢这个原理,但是对于如何最好地获取和设置任何实现ICategorised 的对象的类型感到有些困惑。我的最终目标是能够创建一个对象,例如:

public class Car : ICategorised {
    public int CarID { get; set; }
    public string CarName { get; set; }
    public int CategoryID { get; set; }
    public Category Category { get; set; }
}

.. 并且能够以某种方式查询CategoriesType==Car 的位置。

【问题讨论】:

  • 您预计会出现多少种类型?
  • 最初只是一对。我的计划是使我正在编写的业务逻辑、视图等尽可能易于重用。

标签: c# entity-framework design-patterns code-first entity-framework-5


【解决方案1】:

我认为您应该重新考虑将ICategorized 用作存在类型的当前用法。在我看来,实际上这应该是Category,因为CategoryICategorized 中的所有内容提供了定义,但目前并没有真正实现它。如果您想保留ICategorized,我会让Category 作为第一点实现它。

其次,我会创建Category abstract,因为它不应该被直接实例化。然后您的Car 和您创建的任何其他分类类将直接派生自abstract Category。如果您如上所述更改层次结构,这也会使它们成为ICategorized

这将实现我所想的你,并导致一个更清晰的层次结构,可以为未来的类型扩展。然后,您可以直接查询Type,因为每个特定的Category 子类都将有一个明确的Type 集,例如Car

希望有所帮助,或者至少是朝着正确方向迈出的一步。

【讨论】:

  • 这是一个更好的方法。我放弃了 ICategorised,而是创建了一个抽象的 Category 类,每个分类的类型都有派生类。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-23
相关资源
最近更新 更多