我有这样一门课:
public class Person
{
public virtual long ID { get; set; }
public virtual string FirstName { get; set; }
public virtual string LastName { get; set; }
public virtual boolean IsValid { get; set; }
}和人员数据映射:
public class PersonMap : ClassMap<Person>
{
public PersonMap()
{
Id(x => x.ID);
Map(x => x.FirstName).Not.Nullable().Length(100);
Map(x => x.LastName).Not.Nullable().Length(100);
Map(x => x.IsValid).Not.Nullable();
}
}这是表模式:
CREATE TABLE [dbo].[Person](
[ID] [bigint] IDENTITY(1,1) NOT NULL,
[FirstName] [nvarchar](100) NOT NULL,
[LastName] [nvarchar](100) NOT NULL,
[IsValid ] [bit] NOT NULL,
PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]当我使用Fluent NHibernate在数据库中插入一个新的Person时,我们遇到了这个问题:
error dehydrating property value for `NameSpaceA.IsValid`和内部异常:
_innerException = {"Invalid index 2 for this SqlParameterCollection with Count=2."}发布于 2013-04-12 00:09:26
正如Jamie Ide所说,尝试显式地映射由identity生成的Id,但也要检查并查看从IsValid映射中删除.Not.Nullable()是否允许它工作。因为在c#中,类型是boolean,所以无论如何都不能为空。
public PersonMap()
{
Id(x => x.ID).GeneratedBy.Identity();
Map(x => x.FirstName).Not.Nullable().Length(100);
Map(x => x.LastName).Not.Nullable().Length(100);
Map(x => x.IsValid);
}发布于 2013-04-11 05:11:35
请提供完整的错误消息和堆栈跟踪。这是一条错误消息,通常具有误导性,因为其他错误发生在此错误之前。
我大胆猜测,根本原因是您没有为ID属性声明生成器。它被类型化为long的事实也可能是一个问题。如何生成/设置ID属性?
假设您使用的是标识列(int),映射将是:
Id(x => x.ID).GeneratedBy.Identity();https://stackoverflow.com/questions/15932312
复制相似问题