实体框架-事件问题

本文关键字:问题 事件 框架 实体 | 更新日期: 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。