static DBContext返回不正确的值

时间:2012-02-20 03:18:20

标签: c# asp.net-mvc-3 entity-framework-4

我遇到一种情况,其中带有静态DBContext成员的辅助类使用与非静态DBContext变量不同的值填充模型的布尔字段。后者正在获得正确的变量。

在这种情况下,我在数据库中有一个具有指定用户名的用户,其中“isAdmin”设置为true。静态成员返回一个isAdmin = false的User对象,另一个返回true,如预期的那样。见下文。

任何人都知道为什么会这样?

以下是模型:

public class User
{
    [Required]
    public int UserID { get; set; }
    [Required]
    public string username { get; set; }
    [Required]
    public bool isAdmin { get; set; }
}

有问题的助手类看起来像这样:

public static class UserAuthHelper
{
    private static SSBPDContext db = new SSBPDContext();
    public static User getUser(string username, string plaintextPassword)
    {
        var users = db.Users.Where(u => u.username.Equals(username));

        User user = (from u in db.Users
                     where u.username.Equals(username)
                     select u).FirstOrDefault();
        //this user has isAdmin = false
        User otherUser;
        using (var db2 = new SSBPDContext())
        {
            otherUser = (from u in db2.Users
                         where u.username.Equals(username)
                         select u).FirstOrDefault();
            //otherUser has isAdmin = true
        }

    }
}

2 个答案:

答案 0 :(得分:3)

您的上下文不应该是静态的。每个请求创建一个。依赖注入可以帮助您(这是一个单独的问题/答案)

上下文不是线程安全的,因此在这里找不到问题甚至不值得。

答案 1 :(得分:1)

这是因为DBContext缓存了您请求的实体,因此下次您向相同的实体请求相同的DBContext时,它将从内存中获取它,而不是再次查询数据库。因此,将忽略对该DBContext之外的该实体的每次更改。