C# 使用NHibernate将一个映射到多个时出错

C# 使用NHibernate将一个映射到多个时出错,c#,nhibernate,fluent-nhibernate,automapper,has-many,C#,Nhibernate,Fluent Nhibernate,Automapper,Has Many,我是NHibernate和C#的新手,所以请温柔一点 我有以下两个NHibernate实体: public class Client : IEntity { public virtual int Id { get; set; } public virtual IList<Residence> Residences { get; set; } } 从客户到居住地,他们之间有一对多的关系(每个客户的记录中可以有多个居住地) 将此映射与使用自动映射一起使用 public

我是NHibernate和C#的新手,所以请温柔一点

我有以下两个NHibernate实体:

public class Client : IEntity
{
    public virtual int Id { get; set; }

    public virtual IList<Residence> Residences { get; set; }
}
从客户到居住地,他们之间有一对多的关系(每个客户的记录中可以有多个居住地)

将此映射与使用自动映射一起使用

public void Override(AutoMapping<Client> mapping)
{
     mapping.Id(c => c.Id).GeneratedBy.Native();
     mapping.HasMany(c => c.Residences).KeyColumn("Id").Inverse().Cascade.All();
     mapping.Table("Clients");
}
存储库:

public class ClientService : IClientService
{
    private readonly IRepository<Client> _clientRepository;

    public void Create(Client client)
    {
        _clientRepository.Create(client);
    }
}
公共类ClientService:IClientService
{
私人只读电子存储库_clientRepository;
创建公共void(客户端)
{
_clientRepository.Create(客户端);
}
}
我对客户端使用外键有问题

此错误:NHibernate.PropertyValueException:not null属性引用null或暂时值ProjectBase.Domain.Entities.Residence.Client


我认为这是因为您试图使用尚未添加到表客户机的ForeignKey Id客户机。但我不知道如何解决它。我需要帮助解决这个错误。谢谢!

解决了它,将映射更改为:

public void Override(AutoMapping<Client> mapping)
{
     mapping.Id(c => c.Id).GeneratedBy.Native();
     mapping.HasMany(c => c.Residences).Inverse().Cascade.All();
     mapping.Table("Clients");
}

and

public void Override(AutoMapping<Residence> mapping)
{
     mapping.Id(p => p.Id);
     mapping.References(x => x.Client)
}
public void覆盖(自动映射)
{
mapping.Id(c=>c.Id).GeneratedBy.Native();
mapping.HasMany(c=>c.Residences).Inverse().Cascade.All();
映射表(“客户”);
}
和
公共无效替代(自动映射)
{
map.Id(p=>p.Id);
mapping.References(x=>x.Client)
}
并在客户端中添加构造函数

public Client()
{
    Residences = new List<Residence>();
}
公共客户端()
{
住宅=新列表();
}

Ty.

解决了它,将映射更改为:

public void Override(AutoMapping<Client> mapping)
{
     mapping.Id(c => c.Id).GeneratedBy.Native();
     mapping.HasMany(c => c.Residences).Inverse().Cascade.All();
     mapping.Table("Clients");
}

and

public void Override(AutoMapping<Residence> mapping)
{
     mapping.Id(p => p.Id);
     mapping.References(x => x.Client)
}
public void覆盖(自动映射)
{
mapping.Id(c=>c.Id).GeneratedBy.Native();
mapping.HasMany(c=>c.Residences).Inverse().Cascade.All();
映射表(“客户”);
}
和
公共无效替代(自动映射)
{
map.Id(p=>p.Id);
mapping.References(x=>x.Client)
}
并在客户端中添加构造函数

public Client()
{
    Residences = new List<Residence>();
}
公共客户端()
{
住宅=新列表();
}

Ty.

您坚持的
客户
是否有
住所
s?在某些地方,NH试图保存的工作单元中有一个
住宅
,但它有一个空的
客户端
。是的,当它给出错误时,我在客户端中有一个或多个住宅。是否保存住宅是否将其
客户端
属性设置为父客户端?您要持久化的
客户端
是否有任何
居住地
s?NH试图保存的工作单元中有一个
住宅
,但它有一个空的
客户端
。是的,当它给出错误时,我在客户端中有一个或多个住宅。住宅是否将其
客户端
属性设置为父客户端?
public Client()
{
    Residences = new List<Residence>();
}