我的应用程序中有实体需要一个惟一的友好标识符,该标识符包含一个对子集唯一的序列整数。例如,在项目管理软件中,您可能有一个名为"SUPPORT“的项目,然后与该项目相关的案例自动编号为"SUPPORT-1”、"SUPPORT-2“等。
Q:如何获得与实体实例上的其他属性有条件的唯一标识符?
我已经(暂时)在我的应用程序中实现了这一点,方法是重写DbContext.SaveChanges()方法,检查数据库中与项目相关的最新值,然后创建一个带有项目名称和序列号的字符串。这似乎不健全,我正在寻找一个适当的模式。
研究模式--我在EF核心文件中找到了C2方法--但我不知道如何实现这个方法,这取决于项目的价值(因此,“支持”中的案例是唯一的序列,而不是与“软件”项目中的案例重叠)。
我目前正在使用实体框架核心3.1。
发布于 2020-11-24 05:44:27
您只需将最新的案例编号作为字段存储在项目记录中,并在创建case的新实例时将它们组合起来。这将是交换清洁的模式和一点空间的效率。小心并发。
您还可以将子案例的集合添加到您的项目实体中,并让EF为您填充它,这样您就可以获取计数/最新的子实例并调整新实体上的数字。这保留了您的模型和空间,但确实花费了更多的时间和带宽。小心并发。
最后,您可以为数据库编写一个触发器,该触发器可以执行SaveChanges()中的操作,但可以直接在数据库中执行。这将比目前的方法更有效,也更健壮,但是将新案例插入数据库需要花费更长的时间。您的RDBMS应该为您处理并发。
https://softwareengineering.stackexchange.com/questions/419293
复制相似问题