【问题标题】:Using static data access methods with the ADO.NET Entity Framework通过 ADO.NET Entity Framework 使用静态数据访问方法
【发布时间】:2010-12-15 20:40:44
【问题描述】:

您好,我是第一次使用 ADO.NET 实体框架,静态代码分析建议我将以下方法更改为静态方法,如下所示。

我的问题很简单,这个线程安全吗?

public static void InsertUserDetails(UserAccount userAccount)
        {
            using (KnowledgeShareEntities entities = new KnowledgeShareEntities())
            {
                Users user = new Users();
                user.usr_firstname = userAccount.FirstName;
                user.usr_surname = userAccount.LastName;
                user.usr_email = userAccount.Contact.Email;
                user.usr_logon_name = userAccount.SAMUserAccountName.ToUpper();
                user.usr_last_login_datetime = DateTime.Now;
                entities.AddToUsers(user);
                entities.SaveChanges();
            }
        }

【问题讨论】:

    标签: c# ado.net linq-to-entities thread-safety


    【解决方案1】:

    由于您只使用局部变量,因此该方法是线程安全的。不涉及静态变量,因此所有内容都在线程本地堆栈上,不会发生竞争条件。

    【讨论】:

    • 我同意它是线程安全的,因为它只使用局部变量,但这可能是静态代码分析表明它应该是静态方法的唯一原因,因为静态数据访问通常不是很好主意。任何使用此静态方法插入用户的代码都具有在单元测试期间难以模拟的静态依赖项,这意味着调用此静态方法的单元测试代码意味着测试必须针对真实数据库。可能原发帖人改标题问线程安全问题。
    • @flipdoubt 你绝对正确地指出静态方法很难测试,不应该在这种情况下使用,但这有点离题,因为 OP 刚刚询问了线程安全。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-17
    • 1970-01-01
    • 2012-03-30
    • 1970-01-01
    • 2012-04-19
    • 2020-08-18
    • 1970-01-01
    相关资源
    最近更新 更多