小编Ale*_*Sin的帖子

从现有SQL Server数据库构建模型时缺少关联

编辑:问题在较新版本的EF中得到解决.至少这是我假设的,因为我最近创建了一个新项目并遵循相同的步骤,一切都很顺利!感谢您的意见和帮助.我留下原始问题,未触及,下面.

我是第一次使用实体框架.我有一个奇怪的问题:我在SQL Server上有这个小数据库.以下是管理工作室的图表:

在此输入图像描述

如您所见,外键都已定义.为了生成edmx模型,我选择了"New Item - > ADO.NET Entity Data Model - > Generate from database".这就是我得到的:

在此输入图像描述

所有的协会都缺少了两个!这很奇怪,因为好老的L2S可以毫无问题地识别它们:

在此输入图像描述

任何人都可以帮我解决这个问题吗?

c# entity-framework visual-studio-2010 edmx sql-server-2008

8
推荐指数
2
解决办法
1747
查看次数

如何聚合来自异步生产者的数据并将其写入文件?

我正在学习C#中的异步/等待模式.目前我正在尝试解决这样的问题:

  • 有一个生产者(硬件设备)每秒生成1000个数据包.我需要将此数据记录到文件中.

  • 该设备仅具有一次ReadAsync()报告单个数据包的方法.

  • 我需要缓冲数据包并按照它们生成的顺序将它们写入文件,每秒只执行一次.

  • 如果写入过程没有在下一批数据包准备好写入时及时完成,则写操作应该失败.

到目前为止,我写了类似下面的内容.它有效,但我不确定这是否是解决问题的最佳方法.有任何意见或建议吗?在消费者需要汇总从生产者处收到的数据时,采用这种生产者/消费者问题的最佳做法是什么?

static async Task TestLogger(Device device, int seconds)
{
    const int bufLength = 1000;
    bool firstIteration = true;
    Task writerTask = null;

    using (var writer = new StreamWriter("test.log")))
    {
        do
        {
            var buffer = new byte[bufLength][];

            for (int i = 0; i < bufLength; i++)
            {
                buffer[i] = await device.ReadAsync();
            }

            if (!firstIteration)
            {
                if (!writerTask.IsCompleted)
                    throw new Exception("Write Time Out!");
            }

            writerTask = Task.Run(() =>
                {
                    foreach (var b in buffer)
                        writer.WriteLine(ToHexString(b)); …
Run Code Online (Sandbox Code Playgroud)

.net c# producer-consumer task-parallel-library async-await

7
推荐指数
1
解决办法
1170
查看次数

如何将列名传递给处理data.frames的函数

我正在绘制许多类似的图,所以我想我写了一个函数来简化任务.我想传递它data.frame和要绘制的列的名称.这是我尝试过的:

plot_individual_subjects <- function(var, data)
{
  require(ggplot2)

  ggplot(data, aes(x=Time, y=var, group=Subject, colour=SubjectID)) +
    geom_line() + geom_point() + 
    geom_text(aes(label=Subject), hjust=0, vjust=0)
}
Run Code Online (Sandbox Code Playgroud)

现在,如果var是一个字符串,它将无法工作.如果将命令的aes一部分更改为,它将无法工作ggplot,y=data[,var]并且它会抱怨无法对闭包进行子集化.

那么解决这个问题和类似问题的正确方法/最佳实践是什么?如何将列名轻松安全地传递给想要对data.frames进行处理的函数?

r ggplot2

5
推荐指数
1
解决办法
1482
查看次数

录制USB鼠标事件

在Windows中捕获和记录全局USB鼠标事件的最佳方法是什么?我已经使用低级鼠标回调编写了一个小型数据捕获程序.但是,这对我来说不够低级:这种方法允许您捕获鼠标光标在屏幕上的位置(即屏幕坐标),而不是捕获实际上相对运动的实际鼠标事件(想想delta-x和delta-y).

我可以查看每个事件的位置增量,但由于屏幕坐标被剪切在0和屏幕宽度/高度之间,因此会丢失一些数据.此外,我不知道如果像游戏这样的全屏程序改变屏幕分辨率或做一些可能影响鼠标事件的其他事情会发生什么.

那么有没有其他用户模式方法来记录比SetWindowsHookEx挂钩更低级别的USB鼠标事件?我想在Windows进行任何处理之前进入物理鼠标事件.

usb winapi mouseevent

3
推荐指数
1
解决办法
1302
查看次数

SerialPort在关闭后触发DataReceived事件

尝试停止SerialPort时,我遇到了一种奇怪的行为:在取消订阅和调用之后,DataReceived事件继续触发close!(参见StopStreaming以下代码).因此,在我的事件处理程序代码中,我得到一个InvalidOperationException,并显示"端口已关闭"的消息.

我错过了什么?关闭端口和停止事件的正确方法是什么?

编辑:我每次运行代码时都会收到此错误.所以这不是随机发生的竞争条件,而是一个系统性问题,表明代码完全破碎!但是,我没看到怎么样......

private SerialPort comPort = new SerialPort();

public override void StartStreaming()
{
  comPort.Open();
  comPort.DiscardInBuffer();
  comPort.DataReceived += comPort_DataReceived;
}

public override void StopStreaming()
{
  comPort.DataReceived -= comPort_DataReceived;
  comPort.Close();
  isStreaming = false;
}

private void comPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
  if (e.EventType == SerialData.Chars)
  {
    SerialPort port = (SerialPort)sender;
    int N = comPort.BytesToRead;
    for (; N > 0; N--)
    {
      byte b = Convert.ToByte(comPort.ReadByte());
      //... process b
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

编辑:按照建议,我将StopStreaming代码更改为以下内容:

public override void …
Run Code Online (Sandbox Code Playgroud)

.net c# serial-port

0
推荐指数
1
解决办法
7266
查看次数