扩展CatalogProduct模型(Item表)

时间:2019-03-07 01:08:13

标签: virtocommerce

我想用自己的模型扩展CatalogProduct模型。我遵循了GitHub上的CartModule示例。我想我已经完成了示例中的所有部分,但仍然无法正常工作。

这是我所做的事情:

  • 将来自NuGet的VirtoCommerce.CatalogModule.Data安装到我创建的模块中。
  • 创建了一个MyProduct类,该类继承了CatalogProduct类。
  • 创建了MyProductEntity类,该类继承了ItemEntity,并且我重写了ToModel,FromModel和Patch函数。
  • 创建了MyProductRepositoty类,该类继承了CatalogRepositoryImpl,并重写了OnModelCreating函数以告诉我要映射到哪个表。
  • 修改了Module.cs文件,并实现了SetupDatabase(),Initialize()和PostInitialize()。

  • 这是我放入Initialize()的内容

    _container.RegisterType<ICatalogRepository>(new InjectionFactory(c => new MyProductRepository(_connectionStringName, _container.Resolve<AuditableInterceptor>(), new EntityPrimaryKeyGeneratorInterceptor())));
    
  • 这是我在PostInitialize()中添加的内容

    AbstractTypeFactory<CatalogProduct>.OverrideType<CatalogProduct, MyProduct>();
    AbstractTypeFactory<ItemEntity>.OverrideType<ItemEntity, MyProductEntity>();
    
  • 重建我的模块,然后重新启动IIS

  • 我点击了localhost / admin / docs / VirtoCommerce.Catalog / v1,以查看添加到模型中的字段是否从产品定义中返回。没有。

我缺少一些步骤吗?实际上,我正在进行迁移。它实际上在数据库中创建了“ MyProduct”表。

另一个问题是,将列添加到现有的“ Item”表中是个好主意吗?还是建议在扩展域模型时创建一个新表?

谢谢大家!

1 个答案:

答案 0 :(得分:0)

您看不到API更改的原因是,除了域模型之外,目录模块还使用了网络模型-例如Product,API控制器将返回这些Web模型对象。这与示例中的购物车模块有所不同。

要查看更改,您需要将扩展​​类型用于网络模型并扩展converter

如您所见,在vc-platform 2x版本中,目录模块扩展并不是那么简单。在3x(NET Core)平台版本中,将通过消除Web模型来缓解这种情况。

在平台2x中扩展目录对象功能的更简单的内置方法是使用动态属性(in UIby code)。

  

另一个问题是,将列添加到   现有的“项目”表?还是建议何时创建一个新表   扩展域模型?

推荐的方法是创建新表。