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中的代码片段之间有什么区别。我认为唯一的区别是上下文在传入变量后存储在变量中?