【发布时间】:2016-12-12 13:42:03
【问题描述】:
我正在设计我的存储库,但我有一个疑问。例如,当创建一个新用户时,我必须在不同的表上添加条目。现在我使用类似的东西:
public User CreateNewUser()
{
try
{
using (var con = new SqlConnection(_SecureConnectionString))
{
con.Open();
using (var transaction = con.BeginTransaction())
{
User user = //User Repository query to INSERT the user on dbo.Users and return object
user.Items = // Item Repository query to INSERT on dbo.Items that have a FK to dbo.Users
user.Whatever = // Whatever repository call to INSERT on tables that are related to the new user
transaction.Commit();
}
}
catch (Exception ex)
{
transaction.Rollback();
throw;
}
}
我的问题是,如果创建一个新用户并且它总是必须在由其他存储库管理的不同表上创建条目,我是否应该避免如此原子化并在 UserRepository 上的单个查询中执行它,即使它插入到其他表上?当我可以一次完成时,我正在执行 3 次数据库命中。
【问题讨论】:
-
你没有使用实体框架有什么原因吗?
-
正如 Zoran 所说,这是游戏服务器解决方案的一部分,实体框架与 dapper 相比速度较差。对于这种特定情况(在注册时创建用户),我不需要很快,但并非总是如此。
-
你缺少一个工作单元来协调跨存储库的事务。
标签: c# sql repository-pattern .net-core solid-principles