Asp.net mvc MVC简单插入不更新数据库

Asp.net mvc MVC简单插入不更新数据库,asp.net-mvc,database,dbcontext,Asp.net Mvc,Database,Dbcontext,这辆车快把我逼疯了。我试图做一个“简单”的记录插入,我只能让它工作,如果我存储在一个变量的上下文或创建一个本地上下文。我试图将上下文和模型对象绑定在一起,但到目前为止运气不佳 public class TransactionDataAccessLayer { public cartableContext transactionContext { get { return new

这辆车快把我逼疯了。我试图做一个“简单”的记录插入,我只能让它工作,如果我存储在一个变量的上下文或创建一个本地上下文。我试图将上下文和模型对象绑定在一起,但到目前为止运气不佳

public class TransactionDataAccessLayer
{        
    public cartableContext transactionContext
    {
        get
        {                
            return new cartableContext();
        }
    }
}



class TransactionBusinessLayer
{       
    Cardata newCar = new Cardata();
    public void addCar(Cardata cd)
    {
        try
        {

            //this works. Storing the context in ctc2 seems to make it work???
            TransactionDataAccessLayer tdal = new TransactionDataAccessLayer();
            cartableContext ctc2 = tdal.transactionContext;
            ctc2.cardata.Add(cd);
            ctc2.SaveChanges();

            //this does not work
            tdal.transactionContext.cardata.Add(cd);                
            tdal.transactionContext.Entry(cd).State = EntityState.Modified;                
            tdal.transactionContext.SaveChanges();

        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.InnerException);
        }
    }
}
在C#中,属性基本上只是花哨的方法,旨在使访问私有字段更容易。因此,在getter中返回一个新上下文就可以做到这一点;每次访问时返回一个新的。要保留状态,需要将上下文包含在私有字段中,如下所示:

public class TransactionDataAccessLayer
{   
    private cartableContext _transactionContext;
    public cartableContext transactionContext
    {
        get
        {   
            if (_transactionContext == null)
               _transactionContext = new cartableContext();
            return _transactionContext;
        }
    }
}

如果每次访问
transactionContext
属性时都返回一个新的上下文,那么这将如何工作?所有这些行动都应该在同一个背景下进行,这就是为什么另一种方法有效。在MVC中,每个请求通常都有一个上下文。@tereško感谢这两个请求的响应。请原谅,现在我真的很困惑。我认为每次响应后都会刷新上下文,因此您需要一个新的上下文来处理模型对象??上下文是否应在所有响应中保持不变?transactionBUsinessLayer(TBL)也从控制器的addCar方法运行。是否应将其移到外部以便TBL保持?我仍然不知道上面TBL中的代码片段之间有什么区别。我认为唯一的区别是上下文在传入变量后存储在变量中?