实体框架-事件问题
本文关键字:问题 事件 框架 实体 | 更新日期: 2023-09-27 18:00:37
我刚开始强迫自己使用实体框架(我知道我落后了很长一段路),但我已经在第一个障碍上摔倒了。
我正在编写的程序只是看着PLC运行一段时间。当它变为true时,将触发一个事件,然后将值(此时为随机值)输入SQL。然后我将比特设置为false。
我遇到的问题是,事件触发一次,条目被添加,bit被设置为false。然而,该事件再也不会触发。如果我注释掉所有的SQL位,然后将该位设置为false,那么它可以完美地工作并多次触发。
以下是我掌握的大部分代码。
如有任何帮助,我们将不胜感激。
static void Main(string[] args)
{
PlcListener plcListener = new PlcListener();
plcLister.BitChanged += (bitVal) => On_BitChanged(bitVal, plcListener)
plcListner.Start();
}
private static void On_BitChanged(bool bitVal, PlcListener plcListner)
{
SqlEntities sqlEntity = new SqlEntities();
SampleData sampleData = new SampleData(){ Data = new Random().Next(); };
sqlEntity.AddToSampleDatas(sampleData);
sqlEntity.SaveChanges();
plcListener.Confirm();
}
public class PlcListener
{
public void Start()
{
OPCServer opcServer = new OPCServer();
opcServer.DataChanged += On_DataChanged;
}
public void Confirm()
{
//Code to set bit to false
}
public void On_DataChanged(bool bitVal.......)
{
if(bitVal)
{
BitChangedEventHandler handler = BitChanged;
if (handler != null)
{
handler(bitVal);
}
}
}
public delegate void BitChangedEventHandler(bool bitValue);
public event BitChangedEventHandler BitChanged;
}
您没有提到您正在使用哪个OpcServer组件,但最可能的问题是DataChange在COM回调线程中进入您的应用程序,并且在处理回调时不允许写回COM。您只需要记录传入值,并在自己的处理程序线程中进行实际处理,然后在PLC中将位设置回false。