Flo*_*eft 6 .net entity-framework
这不是一个技术问题,而是一个关于如何建模数据的问题.
首先,我正在使用Entity Framework来构建数据存储.
我一直在为一个小企业创建一个电子商务网站,我已经创建了一个似乎工作正常的系统,但我现在意识到我犯了一个根本性的错误(我想!).
我有一个订单对象和一个产品对象.该产品显然包含有关产品的所有详细信息,包括价格.
我现在已经创建了100多种产品,这些产品现在位于名为Products的表中
因此,当我创建订单时,会在订单中添加单个产品或多个产品.所以订单现在包含对products表的引用.
这工作正常,直到我意识到我可能想要改变订单中产品的价格(提供折扣等).由于订单中的产品与产品表相关联,如果我对价格进行更改,则会更改所有先前和将来订单的价格.
所以看起来我需要2个产品表.一个是当前的待售产品清单,一个是销售产品的订单对象的子产品.
对此进行建模的最佳方法是什么?我相信我需要2个不同的产品表.
任何有关这方面的指导将不胜感激.
您可以通过多种方式实现这一目标,而不是复杂性将决定哪种解决方案最适合您.
就个人而言,我不会直接(如果有的话)将产品链接到产品.我的订单将包含订单行,其中包含描述,单价,数量等.如果您想启用导航或链接回产品,那么我会在订单行上添加产品链接.产品的价格永远不会计入订单成本,它只是在订购时复制到订单行,同时也适用任何折扣/修改.您可以安全地修改订单行,而不会影响任何产品或其他订单.订单行只会涉及单个订单.
我假设产品和订单之间的链接是多对多的?如果是这样在链接表上(这可能意味着您必须首先在实体框架代码中手动指定交叉表),您可以添加价格转换属性.这可能只是一个百分比 - 100%没有变化90%的10%折扣等
您可以完全将产品的价格与产品分开,然后您可以为特定用户,用户组甚至订购数量的产品分配给定价格,具体取决于您想要的复杂程度.这可能会证明很多工作,但听起来并不像你需要的东西.
此外,虽然我可能不想这样做,但您可以使每个产品条目不可变(它永远不会改变),并且通过创建新记录然后将原始或新创建的产品标记为"隐藏"来模拟更改"(缺乏更好的术语)并且通常无法获得.在提供产品折扣的情况下,您将修改与订单相关联的产品,并在幕后修改它真正要做的是创建一个新的"隐藏"产品,并在其上加上新价格.您必须在视图产品页面上处理此问题,以检测产品的状态并相应地处理它.如果使用订单历史记录页面并允许导航到您已经给予大量一次折扣的产品,则需要确保您的应用程序不允许以该价格进行其他订单.