小编hol*_*gac的帖子

流利的NHibernate - 如何映射List <enum>?

我有一个类,里面有一个字符串和一个枚举器列表.

public enum SomeEnum
{
    Undefined=0,
    Enum1,
    Enum2,
    Enum3,
    End
}
public class SomeObject
{
    public virtual int ID{get; set;}
    public virtual String Name {get; set;}
    public virtual IList<SomeEnum> EnumList {get; set;}
}
Run Code Online (Sandbox Code Playgroud)

现在,应该有一个SomeObjects列表,包含ID和Name.应该有另一张这样的地图:

5 2
5 3
3 1
9 3
Run Code Online (Sandbox Code Playgroud)

意思是,ID为5的玩家有Enum2和Enum3,另一个ID为3的玩家有Enum1,而ID为9的玩家有Enum3.他们说可以映射int,float等,但我不想在列表中创建IList.

有一种简单的方法可以让流利的nhibernate这样做吗?

HasMany(x => x.EnumList )
    .Cascade.All()
    .Table("ObjectEnumTable");
Run Code Online (Sandbox Code Playgroud)

此映射文件抛出异常并说"关联引用未映射的类:SomeEnum".

提前致谢.

.net nhibernate fluent

10
推荐指数
1
解决办法
3028
查看次数

禁用特定 USB 设备

我需要在linux(确切地说是debian)中编写一个程序,如果USB设备未通过特定的过滤器,则禁用它。例如,程序可能被设置为禁止网络摄像头、U 盘和键盘,启用鼠标和打印机(通过 USB)。过滤器可能会在运行时发生变化。例如,程序可能会收到一条启用 USB 记忆棒的消息,并且它应该在不重新启动系统的情况下做出响应。该程序是用 python 编写的,但嵌入 c 代码(或其他代码)也是可以接受的。

我尝试过的

我尝试过很多方法,但其中一些与编程无关。

首先,我尝试搞乱 udev。我可以在设备插入时监视活动并写入过滤器。曾经有一个选项“ignore_device”忽略过滤的设备。例如,要忽略属于 usb 子系统成员的所有设备,我会将其编写为 udev 规则:

ACTION=="add", SUBSYSTEM=="usb", OPTIONS+="ignore_device"
Run Code Online (Sandbox Code Playgroud)

但这个选项是在这个版本的 udev 中发布的。到目前为止我得到的是udev目前主要用于监控。当然,我可以为上面运行脚本的规则编写附加规则,但我必须在其他地方进行禁用。

其次,我尝试 ioctl 向设备句柄发送 DISCONNECT 信号。我正在用 USB 鼠标对此进行测试。这是Python代码:(我也在C中尝试过,没有任何改变)

import fcntl
import sys
USBDEVFS_RESET = ord('U') << (4*2) | 20
USBDEVFS_DISCONNECT = ord('U') << (4*2) | 22
raw_name = "/dev/bus/usb/{:03d}/{:03d}"
filename = raw_name.format(1,2)
fd = open(filename, "wb")
fcntl.ioctl(fd, USBDEVFS_DISCONNECT, 0)
Run Code Online (Sandbox Code Playgroud)

在这里,如果我发送 USBDEVFS_RESET,它会起作用,鼠标输入会被忽略一两秒。但断开信号会引发错误:

IOError: [Errno 25] Inappropriate ioctl for device
Run Code Online (Sandbox Code Playgroud)

我从这里得到的是,我无法向鼠标发送断开连接信号。也许 USB 记忆棒或打印机或其他一些设备可以工作,我还没有尝试过。我想开发尽可能通用的程序,以避免编写额外的特定于设备的代码,因此这种方法对我来说似乎毫无用处。这里的另一点是,当我手动断开/连接鼠标时,我会在 udev 监视器中看到事件。但是当我发送重置信号时,没有发送任何事件。

udev 监视器表示鼠标已安装到此路径:(/sys/bus/usb/devices/1-3 …

linux usb kernel linux-device-driver linux-kernel

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

OutputDebugString不在Visual Studio 2010中打印信息

我一直试图开始OutputDebugString工作,但没有用.我的代码如下:

int main(int argc, char* argv[])
{
    OutputDebugStringA("asd");
    getchar();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我在没有调试的情况下运行应用程序时,DebugView显示asd但是当我调试我的应用程序(F5)时,它不会在输出或中间窗口中打印我的字符串.

我尝试过OutputDebugString asd但没有改变.可能是什么问题?

visual-studio-2010 windows-7-x64

4
推荐指数
1
解决办法
8806
查看次数