相关疑难解决方法(0)

IndexOutOfRangeException在NHibernate的深处

我有以下映射:

public class SecurityMap : ClassMap<Security>
    {
        public SecurityMap()
        {
            Table("Security");
            CompositeId().KeyProperty(k => k.Id, "SecurityId").KeyProperty(k => k.EndDate);
            Map(x => x.LastUpdateUser);
            References(x => x.Company).Columns("CompanyId", "EndDate");
            References(x => x.PrimaryListing).Columns("PrimaryListingId", "EndDate");
         }
    }

public class ListingMap : ClassMap<Listing>
    {
        public ListingMap()
        {
            Table("Listing");
            CompositeId().KeyProperty(k => k.Id, "ListingID").KeyProperty(k => k.EndDate);
            References(x => x.Security).Columns("SecurityId","EndDate");
        }
    }

 public class CompanyMap : ClassMap<Company>
    {
        public CompanyMap()
        {
            Table("Company");
            CompositeId().KeyProperty(k => k.Id, "CompanyID").KeyProperty(k => k.EndDate);
            HasMany(x => x.Securities).KeyColumns.Add("CompanyId", "EndDate");
        }       
    }
Run Code Online (Sandbox Code Playgroud)

当我尝试运行此测试时:

[Test]
public void can_update_a_security()
{
    var …
Run Code Online (Sandbox Code Playgroud)

mapping nhibernate exception nhibernate-mapping fluent-nhibernate

12
推荐指数
1
解决办法
8212
查看次数

仅当关联表具有空记录时,此SqlParameterCollection的索引N无效且Count = N.

我有一个相当复杂的实体,当特定数据库表缺少记录时,它不会保存.当记录存在时,实体正确保存.当记录没有我收到例外时:

具有Count = N的此SqlParameterCollection的索引N无效

阅读了通过Google发现的一系列解决方案以及Stack Overflow上最密切相关的问题:

我相信我的问题与我的映射文件设置方式有关.Customer实体引用了Person实体.Person映射到我们已读过但不能写入的表.当Person实体的记录不存在时,我生成异常.如果记录不存在问题.我已将客户的参考设置为Nullable().我也进行了双重检查以确保我没有从任一实体映射两次的属性.

以下是我认为的相关映射信息,但可以根据需要提供更多信息:

顾客

//more mapping code...
References(x => x.Person, "snl_id").Nullable();
//more mapping code...
Run Code Online (Sandbox Code Playgroud)

//more mapping code...
ReadOnly();
Id(x => x.SnlId).Column("SNL_ID");
//more mapping code...
Run Code Online (Sandbox Code Playgroud)

为了使问题进一步复杂化,我们有一些痛苦的代码使NHibernate在Person不存在时表现更好.我不确定它是否适用于此,但认为它足以包含在我的问题中.我们使用下面的代码,因为没有它,NHibernate JIRA将创建​​大量的查询.此Stack Overflow答案中概述了此解决方案.

客户的财产

public virtual Person Person
{
    get
    {
        try
        {
            var snlId = per.Name;
            return per;
        }
        catch
        {
            return null;
        }
    }
    set
    {
        per = value;
    }
}

private EPerson per;
Run Code Online (Sandbox Code Playgroud)

我的映射中缺少什么会导致此异常?我还没有看到这个问题的另一部分吗?

nhibernate fluent-nhibernate fluent-nhibernate-mapping

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