Nhibernate 此计数为13的SqlParameterCollection的索引13无效
这个确切的标题可以在google或stackflow.com上找到很多次,但我得到这个错误的原因与它们都不一样:我在单元测试代码中没有问题,但应用程序中的完全相同的代码导致了这个问题。我希望这是因为映射问题 以下是我的映射:Nhibernate 此计数为13的SqlParameterCollection的索引13无效,nhibernate,mapping,Nhibernate,Mapping,这个确切的标题可以在google或stackflow.com上找到很多次,但我得到这个错误的原因与它们都不一样:我在单元测试代码中没有问题,但应用程序中的完全相同的代码导致了这个问题。我希望这是因为映射问题 以下是我的映射: <?xml version="1.0" encoding="utf-8" ?> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="My.Domain" name
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="My.Domain" namespace="My.Domain">
<class name="My.Domain.ReportFormFlag, My.Domain" table="ReportFormFlag" schema="Core">
<id name="FlagID">
<column name="FlagID" sql-type="uniqueidentifier" not-null="true"/>
<generator class="guid"/>
</id>
<property name="ReportInstanceID" column="ReportInstanceID" type="int" not-null="true"/>
<property name="FormID" column="FormID" type="int" not-null="true"/>
<property name="SiteOrProjectID" column="SiteOrProjectID" type="int" not-null="true"/>
<property name="IsFlagged" column="IsFlagged" type="int" not-null="true"/>
<property name="FlagComment" column="FlagComment" type="string" not-null="false"/>
</class>
</hibernate-mapping>
and here is my class
namespace My.Domain
{
[Serializable]
public class ReportFormFlag
{
public virtual Guid FlagID { get; set; }
public virtual int ReportInstanceID { get; set; }
public virtual int FormID { get; set; }
public virtual int SiteOrProjectID { get; set; }
public virtual int IsFlagged { get; set; }
public virtual string FlagComment { get; set; }
}
}
在NUnit测试中,它按预期工作,但在应用程序中,保存导致此SqlParameterCollection的索引N无效,Count=N异常
我使用的是NH3.0、C3.5、SQLServer2008R2
非常感谢您的任何见解 通常这意味着您在实体中映射了两次字段 通常这意味着您在实体中映射了两次字段 谢谢你的提醒,@ps2goat。今天刚看到你的评论
这是映射问题,但不是因为数据库字段映射了两次。我以前经历过这个问题,但现在已经完全忘记了。问题与某些类型(如integer和datetime)的可空数据字段的映射方式有关。如果int或datetiem字段在db中可以为null,则相应的属性也必须设置为null。在C中,这是通过添加?属性的类型。希望这对某人有所帮助。谢谢您的提醒,@ps2goat。今天刚看到你的评论
这是映射问题,但不是因为数据库字段映射了两次。我以前经历过这个问题,但现在已经完全忘记了。问题与某些类型(如integer和datetime)的可空数据字段的映射方式有关。如果int或datetiem字段在db中可以为null,则相应的属性也必须设置为null。在C中,这是通过添加?属性的类型。希望这对某人有所帮助。感谢Graig的快速响应。我希望是这样,但正如您从我发布的映射中看到的,没有两次映射的字段。最让我烦恼的是,相同的代码在单元测试中运行良好。或者您添加了两次相同的映射文件。不。我仔细检查了一切。更新。这是映射问题,但不是因为数据库字段映射了两次。我以前经历过这个问题,但现在已经完全忘记了。问题与某些类型(如integer和datetime)的可空数据字段的映射方式有关。如果int或datetiem字段在db中可以为null,则相应的属性也必须设置为null。在C中,这是通过添加?属性的类型。希望这对某人有所帮助。@John,你应该把它作为一个单独的答案发布并接受它。这使人们能够快速确定您的问题已经找到了答案。感谢Graig,感谢您的快速回答。我希望是这样,但正如您从我发布的映射中看到的,没有两次映射的字段。最让我烦恼的是,相同的代码在单元测试中运行良好。或者您添加了两次相同的映射文件。不。我仔细检查了一切。更新。这是映射问题,但不是因为数据库字段映射了两次。我以前经历过这个问题,但现在已经完全忘记了。问题与某些类型(如integer和datetime)的可空数据字段的映射方式有关。如果int或datetiem字段在db中可以为null,则相应的属性也必须设置为null。在C中,这是通过添加?属性的类型。希望这对某人有所帮助。@John,你应该把它作为一个单独的答案发布并接受它。这使人们能够快速识别您的问题的答案。您说它在单元测试中运行良好。。。这是针对同一个数据库的吗?使用同一个_提供者?你说它在单元测试中运行良好。。。这是针对同一个数据库的吗?和同一个供应商?
var reportFormFlag = new ReportFormFlag
{
ReportInstanceID = 3554,
FormID = 25,
SiteOrProjectID = 0,
FlagComment = "test",
IsFlagged = 1
};
_provider.Save(reportFormFlag);