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

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

用户
ID
用户名

OpenID
ID
用户身份
声称的Ididentifier

我为每个表都有一个CRUD存储库,并且还有一项与存储库相互交织的服务(每个仓库一项服务)。

我的问题是插入新用户(因为更新将遵循相同的主体)。这是我脑海中的选择。

  1. 让UserService插入新用户,检索用户的ID,然后使用userID插入新的OpenID
  2. 让UserService将新用户与索取的Identifier一起发送到UserRepository,并使存储库同时插入用户和OpenID(这不太符合CRUD方法论)
  3. 创建用户表的视图和OpenID表,创建一个Usersopenidrepository和userOpenidService,然后插入到视图中。

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

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

有帮助吗?

解决方案

根据我的经验,linq2SQL无论如何都不符合CRUD方法。使其合适意味着跳过太多的篮球,真的值得。您所描述的问题甚至不是只有一个问题 - 更新实体时会变得更糟。

因此,我选择了当前项目中的解决方案2(将两个实体插入Usersrepostory中)。

我还放弃了存储库的更新方法。放弃我的存储库只是具有一个submitchanges方法,在加载实体上执行所有更新后必须调用。在同一Web请求中创建的所有存储库共享相同的DataContext,因此我调用哪个存储库并在上面列出了哪个存储库。这不是CRUD,但它可以更好地适应LINQ2SQL执行数据库更新的方式。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top