提交时索引超出范围(Fluent NHibernate)

Index out of range when committing (Fluent NHibernate)

已解决

原来是我的外键弄乱了我。一旦我删除它们,它就像一个魅力。奇怪...

我是 Fluent NHibernate 神奇世界的新手,我 运行 遇到了一些麻烦。我的数据库中有两个相关的 table。这些是 消息 用户 。关系应该是 one 用户可以发送 many 消息并接收 many 消息。 为此,我创建了两张地图。一个用于消息,一个用于用户。我使用 MySQL 作为数据库。
用户

    Id(x => x.Id);
    Map(x => x.Username).Not.Nullable();
    Map(x => x.Password).Not.Nullable();
    Map(x => x.Email).Not.Nullable();         
    Map(x => x.Firstname);
    Map(x => x.Surname);
    Map(x => x.Salt);
    Map(x => x.Privilege);
    HasMany(x => x.Messages).KeyColumn("msg_to_userid").ReadOnly();
    HasMany(x => x.SentMessages).KeyColumn("msg_from_userid").ReadOnly();
    Table("users");

消息

    Id(x => x.Id, "msg_id");
    Map(x => x.Title, "msg_title");
    Map(x => x.ToId, "msg_to_userid").Not.Nullable();
    Map(x => x.FromId, "msg_from_userid").Not.Nullable();
    Map(x => x.DateTime, "msg_datetime");
    Map(x => x.Content, "msg_message");
    Map(x => x.Read, "msg_read");
    References(x => x.To, "msg_to_userid").ReadOnly();
    References(x => x.From, "msg_from_userid").ReadOnly();
    Table("messages");

用户table结构

CREATE TABLE `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(50) NOT NULL,
  `password` varchar(255) NOT NULL,
  `salt` varchar(255) NOT NULL,
  `email` varchar(75) NOT NULL,
  `firstname` varchar(45) DEFAULT NULL,
  `surname` varchar(45) DEFAULT NULL,
  `privilege` tinyint(2) DEFAULT '1',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

以及消息的结构:

CREATE TABLE `messages` (
  `msg_id` int(11) NOT NULL AUTO_INCREMENT,
  `msg_title` varchar(100) DEFAULT NULL,
  `msg_from_userid` int(11) DEFAULT NULL,
  `msg_to_userid` int(11) DEFAULT NULL,
  `msg_datetime` datetime DEFAULT NULL,
  `msg_message` longtext,
  `msg_read` bit(1) DEFAULT b'0',
  PRIMARY KEY (`msg_id`),
  KEY `fk_messages_users_idx` (`msg_from_userid`),
  KEY `fk_msgtouserid_users_idx` (`msg_to_userid`),
  CONSTRAINT `fk_msgfromuserid_users` FOREIGN KEY (`msg_from_userid`) REFERENCES `users` (`id`) ON DELETE SET NULL ON UPDATE SET NULL
) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8;

如您所见,我在消息中有两个外键。一种获取发送的用户,一种获取接收的用户。

当我有数据时,我只使用 begin transaction 和 commit()。我觉得奇怪的是我可以 select 并毫无困难地获取数据。例如,我可以看到我的所有消息,但是当我尝试更新或保存新消息时,它会失败。

我收到的错误消息是 IndexOutOfRangeException 类型的消息:参数索引超出范围。 感谢任何帮助,谢谢!

已解决

原来是我的外键弄乱了我。一旦我删除它们,它就起作用了。我认为最好在 NHibernate 中完成映射后添加外键。这样就更容易知道出了什么问题以及哪些键不起作用。