C# 在第二个线程中添加新项目-无更改
我尝试使用Entity Framework将新项添加到数据库中,但使用SaveChanges()后,数据库中没有此项 我的程序中有两个线程,总是使用using语句在数据库中执行一些操作。(我已经读到了线程安全) 表中的数据显示在数据网格视图中,添加后我可以看到新项目,但关闭Visual Studio后所有更改都消失(数据库中没有更改) 添加新项目的我的代码:C# 在第二个线程中添加新项目-无更改,c#,entity-framework,thread-safety,C#,Entity Framework,Thread Safety,我尝试使用Entity Framework将新项添加到数据库中,但使用SaveChanges()后,数据库中没有此项 我的程序中有两个线程,总是使用using语句在数据库中执行一些操作。(我已经读到了线程安全) 表中的数据显示在数据网格视图中,添加后我可以看到新项目,但关闭Visual Studio后所有更改都消失(数据库中没有更改) 添加新项目的我的代码: using (var context = new dbEntities()) {
using (var context = new dbEntities())
{
Operation myOperation = new Operation { DateTime = DateTime.Now, DelayTime = 10, RepeatCount = 10, RepeatTime = 10, Type = 10, DayOfWeek = 9999999 };
context.Operation.Add(myOperation);
context.SaveChanges();
}
这是基本的,应该可以用,但我不知道为什么不行。你能帮我解决这个问题吗
绑定数据:
List<Operation> myListOfOperation = new List<Operation>();
using (var myDb= new dbEntities())
{
myListOfOperation = myDb.Operation.ToList();
}
m_GridView.Items.Clear();
foreach (var myTempTask in myListOfOperation)
{
m_GridView.Items.Add(myTempTask);
}
List mylistofooperation=new List();
使用(var myDb=new dbEntities())
{
mylistofooperation=myDb.Operation.ToList();
}
m_GridView.Items.Clear();
foreach(mylistofooperation中的var mytestask)
{
m_GridView.Items.Add(mytestask);
}
我在MainWindow构造函数中创建新对象,并在此构造函数中运行新线程。
线程中的函数:
while (true)
{
if (m_OperationInQueue.Count == 0)
{
UpdateQueue();
}
else if (m_GenerateQueue == true)
{
System.Threading.Thread.Sleep(5 * 1000);
}
else
{
TimeSpan myTimeToWait = m_OperationInQueue.First().DateTime - DateTime.Now;
if (myTimeToWait.TotalMinutes < 0)
{
DoOperation(m_OperationInQueue.First());
m_OperationInQueue.RemoveAt(0);
}
else if (myTimeToWait.TotalMinutes > 5)
{
Thread.Sleep(4 * 60 * 1000);
}
else
{
Thread.Sleep(myTimeToWait);
DoOperation(m_OperationInQueue.First());
m_OperationInQueue.RemoveAt(0);
}
}
}
while(true)
{
如果(m_OperationQueue.Count==0)
{
UpdateQueue();
}
else if(m_GenerateQueue==true)
{
系统线程线程睡眠(5*1000);
}
其他的
{
TimeSpan myTimeToWait=m_OperationInQueue.First().DateTime-DateTime.Now;
如果(myTimeToWait.TotalMinutes<0)
{
DoOperation(m_operationQueue.First());
m_OperationQueue.RemoveAt(0);
}
否则如果(myTimeToWait.TotalMinutes>5)
{
线程睡眠(4*60*1000);
}
其他的
{
线程。睡眠(myTimeToWait);
DoOperation(m_operationQueue.First());
m_OperationQueue.RemoveAt(0);
}
}
}
我尝试在DoOperation Function中添加新项这是与多线程相关还是STA中也出现不持久化?您需要更多详细信息-您提到了多线程,但没有提供代码示例说明这是如何适应的,或者您是如何绑定网格的。抱歉,我添加了这个细节。你确定你的数据库在执行之间没有被删除和创建吗?是的,我确定。如果重要的话,我正在使用本地数据库(.sdf)。