我在示例应用程序中遵循数据库优先方法。POCO 类是通过 t4 模板生成的,它将具有它从数据库中携带的 Identity 属性。对于我在域中用作实体的某些类,id 的类型可以是int、string 和 Guid。
我没有看到我可以在域中生成并将其传递给存储库的字符串或 Guid 的问题。在 int 的情况下,我也可以这样做,但我想利用SQL Database 的 AUTOINCREMENT 选项。
我的问题是:
谁的责任是为实体生成身份。它是域还是存储库?
如何在存储库和域之间完成身份同步?例如,我可以为域中的客户创建一个 1000 的 id,并要求存储库保存它。当存储库保存它时,新标识可能是 2000(AUTOINCREMENT 选项设置新标识)。现在这两个实体是不同的,如果域中的 Customer 实体(假设它被缓存以供将来操作)与Department等其他实体一起使用,则可能会导致域中的问题。id 为 1000 的域中的缓存实体 ( Customer ) 将作为新实体保存在 SQL 数据存储中。存储库不知道客户是缓存的还是新的。