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