C# 实体框架装饰器模式

C# 实体框架装饰器模式,c#,entity-framework,interface,decorator,C#,Entity Framework,Interface,Decorator,在我的业务范围内,我们有产品。用户可以通过添加修改来修改这些产品。修改可以做一些事情,比如改变产品的价格和属性。在我看来,这似乎完全符合装饰模式 现在,设想一个数据库,其中产品存在于一个表中,修改存在于另一个表中,数据库通过实体框架连接到我的应用程序。我如何让产品对象和修改对象实现相同的接口,以便可以互换使用它们 例如,我希望能够做的事情: 给定一个修改对象,调用.GetNumThings(),它将返回原始对象中的事物数,加上或减去修改添加的事物数 这个问题可能源于对EF的本质缺乏了解(到目前为

在我的业务范围内,我们有产品。用户可以通过添加修改来修改这些产品。修改可以做一些事情,比如改变产品的价格和属性。在我看来,这似乎完全符合装饰模式

现在,设想一个数据库,其中产品存在于一个表中,修改存在于另一个表中,数据库通过实体框架连接到我的应用程序。我如何让产品对象和修改对象实现相同的接口,以便可以互换使用它们

例如,我希望能够做的事情: 给定一个修改对象,调用.GetNumThings(),它将返回原始对象中的事物数,加上或减去修改添加的事物数

这个问题可能源于对EF的本质缺乏了解(到目前为止,我的所有经验都是非常直接的LOB Silverlight应用程序),如果是这样,请随时告诉我RTFM

提前谢谢

编辑:
如果给定第三个表,将产品链接到修改(一对多),它可以重建装饰对象,那也很好(我意识到这可能是EF自动执行的超出范围的方式)。您建议如何执行此操作,以及代码将驻留在何处?它是EF类的一部分,还是我从DB收到的每个实体都需要通过某种“构建器”来从产品及其修改列表构建装饰对象?

我不完全确定我是否正确理解了你的问题,但这里有:您可以创建EF模型中定义的部分类。您可以定义一个公共接口并使用分部类来实现该接口

例如:

public interface IProduct{
   public int GetNumThings();
}

public partial class Product : IProduct{

   public int GetNumThings()
   {
   ...
   }
}

public partial class Modification: IProduct{
   public int GetNumThings()
   {
   ...
   }
}

这就解决了需要两者实现相同接口的问题。是否有任何东西会阻止IPProduct接口包含IPProduct类型的属性?@Anthony Compton:不,您也可以使用数据库中包含的引用。毕竟,似乎无论如何都需要存储产品和装饰者之间的引用。