Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# (流利)NHibernate:有许多/参考(双向)和#x2B;级联保存_C#_Nhibernate_Fluent Nhibernate - Fatal编程技术网

C# (流利)NHibernate:有许多/参考(双向)和#x2B;级联保存

C# (流利)NHibernate:有许多/参考(双向)和#x2B;级联保存,c#,nhibernate,fluent-nhibernate,C#,Nhibernate,Fluent Nhibernate,在X引用Y的场景中,如何配置双向映射的映射,Y有许多X,这样当我向Y实例添加许多X并保存Y实例时,它将正常工作 为了明确问题,下面是代码: ClientCompany模型有很多相关模型: public class ClientCompany { // .... public virtual ISet<ContactPerson> ContactPeople { get; set; } } // mapping: HasMany(x => x.ContactP

在X引用Y的场景中,如何配置双向映射的映射,Y有许多X,这样当我向Y实例添加许多X并保存Y实例时,它将正常工作

为了明确问题,下面是代码:

ClientCompany模型有很多相关模型:

public class ClientCompany
{
    // .... 
    public virtual ISet<ContactPerson> ContactPeople { get; set; }
}

// mapping:
HasMany(x => x.ContactPeople)
            .AsSet()
            .Inverse()
            .Cascade.All();
调用此代码:

sess.Save(new ClientCompany()
            {                    
                ContactPeople = new HashSet<ContactPerson>()
                {
                    new ContactPerson()
                }
            });
sess.Save(新客户公司()
{                    
ContactPeople=newhashset()
{
新联系人()
}
});
导致此异常的原因:

not null属性引用null或瞬态值 xxxx.ContactPerson.ClientCompany


这只是一个简单的例子,我在现实世界的项目中使用AutoMapper,因此手动设置参考值是而不是解决方案

ORM世界中最重要的想法,即使用NHibernate时,是:

始终设置关系的两个方面

这是有效的方法,如何设置双方:

var person = new ContactPerson();
var company = new ClientCompany
{                    
    ContactPeople = new HashSet<ContactPerson>()
    {
        person,
    },
};
person.ClientCompany = company

sess.Save(company);

现在我们只需在适当的时间调用
AddPerson()

谢谢!我想我可以让它在“company”对象上调用“Save”时自动设置引用。通过这种方式,可以让自动映射器发挥神奇的作用。必须显式设置引用。这真的很关键。如果你这样做,剩下的将由NHibernate处理。。。另一种方法(但我不确定您的自动映射器能够做什么)是创建特殊的方法
AddPerson()
,并在那里实现双向设置(父到子、子到父)。。。但是AutoMapper必须能够调用这样的方法
AddPerson()
var person = new ContactPerson();
var company = new ClientCompany
{                    
    ContactPeople = new HashSet<ContactPerson>()
    {
        person,
    },
};
person.ClientCompany = company

sess.Save(company);
public class ClientCompany
{
    // .... 
    public virtual ISet<ContactPerson> ContactPeople { get; set; }
    public virtual AddPerson(ContactPerson person)
    {
        ContactPeople = ContactPeople ?? new HashSet<ContactPerson>();
        ContactPeople.Add(person);
        person.ClientCompany = this;
    }
}