2

我在这里有点困惑,我希望你们中的一些大师能帮助填补空白。

我目前面临的情况是关于我的“用户”表和“OpenID”表。我的应用程序允许用户拥有多个 OpenID,因此我在单独的表中跟踪它们。

用户
ID
用户名

OpenID
ID
UserID
Claimedidentifier

我为每个表都有一个 CRUD 存储库,并且我还有一个与存储库接口的服务(每个存储库一个服务)。

我的问题是关于插入新用户(因为更新将遵循相同的原则)。这是我脑海中的选项。

  1. 让 UserService 插入一个新用户,检索用户的 ID,然后使用 UserID 插入一个新的 OpenID
  2. 让 UserService 将新用户连同 ClaimedIdentifier 一起发送到 UserRepository,并让存储库同时插入 User 和 OpenID(这不太适合 CRUD 方法)
  3. 创建 User 表和 OpenID 表的视图,创建 UsersOpenIDRepository 和 UsersOpenIDService,然后插入到视图中。

超出我能想到的任何其他想法或建议将不胜感激。

请注意,我没有使用 NHibernate,因此我可以对我的域进行建模,但是我认为合适。我在这个项目上坚持使用 Linq to SQL,

4

1 回答 1

0

以我的经验,Linq2SQL 无论如何都不太适合 CRUD 方法。让它合身意味着要跳过太多的圈子,而不是真正值得。您所描述的问题甚至不是唯一的问题 - 更新实体时会变得更糟。

因此,我在当前项目中选择了解决方案 2(在用户存储库中插入两个实体)。

我也放弃了存储库的更新方法。相反,我的存储库只有一个 SubmitChanges 方法,必须在对加载的实体执行所有更新后调用该方法。在同一个 Web 请求中创建的所有存储库共享相同的 DataContext,因此我在哪个存储库上调用 Submitchanges 并不重要。它不是 CRUD,但它更适合 LINQ2SQL 执行数据库更新的方式。

如果您真的绝对想要纯 CRUD,您可能需要使用 POCO 实体生成模板检查 EF。

于 2010-06-23T22:07:09.347 回答