这让我疯了。我试图做一个“简单”的记录插入,如果我将上下文存储在变量中或创建一个本地上下文,我只能让它工作。我试图将上下文和模型对象绑在一起但到目前为止没有运气。
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);
}
}
}
答案 0 :(得分:1)
在C#中,属性基本上只是花哨的方法,旨在使访问私有字段更容易。因此,在getter中返回一个新的Context就可以做到这一点;每次访问时都返回一个 new 。要保留状态,您需要在私有字段中包含您的上下文,如下所示:
public class TransactionDataAccessLayer
{
private cartableContext _transactionContext;
public cartableContext transactionContext
{
get
{
if (_transactionContext == null)
_transactionContext = new cartableContext();
return _transactionContext;
}
}
}