使用 NHibernate 映射一对多时出错
Error in mapping one-to-many with NHibernate
我是 NHibernate 和 C# 的新手,所以请多关照!
我有以下两个 NHibernate 实体:
public class Client : IEntity
{
public virtual int Id { get; set; }
public virtual IList<Residence> Residences { get; set; }
}
和
public class Residence : IEntity
{
public virtual int Id { get; set; }
public virtual int ClientId { get; set; }
public virtual Client Client { get; set; }
}
并且他们从 Client 到 Residence 是一对多的关系(每个客户在他们的记录中可以有多个 residence)。
使用自动映射有此映射
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 void Override(AutoMapping<Residence> mapping)
{
mapping.Id(p => p.Id);
mapping.References(x => x.Client).Column("Id").Not.Nullable().Cascade.All();
mapping.Table("Residences");
}
在我的控制器中调用客户端的 IRepository:
ClientModel newClient = ClientModel;
Client DomainModel = AutoMapper.Mapper.Map(newClient, new Client());
_clientService.Create(DomainModel);
存储库:
public class ClientService : IClientService
{
private readonly IRepository<Client> _clientRepository;
public void Create(Client client)
{
_clientRepository.Create(client);
}
}
我对客户端使用外键有问题。
此错误:NHibernate.PropertyValueException:非空 属性 引用空值或临时值 ProjectBase.Domain.Entities.Residence.Client
我认为这是因为您尝试使用尚未添加到 table 客户端的 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 Client()
{
Residences = new List<Residence>();
}
Ty.
我是 NHibernate 和 C# 的新手,所以请多关照!
我有以下两个 NHibernate 实体:
public class Client : IEntity
{
public virtual int Id { get; set; }
public virtual IList<Residence> Residences { get; set; }
}
和
public class Residence : IEntity
{
public virtual int Id { get; set; }
public virtual int ClientId { get; set; }
public virtual Client Client { get; set; }
}
并且他们从 Client 到 Residence 是一对多的关系(每个客户在他们的记录中可以有多个 residence)。
使用自动映射有此映射
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 void Override(AutoMapping<Residence> mapping)
{
mapping.Id(p => p.Id);
mapping.References(x => x.Client).Column("Id").Not.Nullable().Cascade.All();
mapping.Table("Residences");
}
在我的控制器中调用客户端的 IRepository:
ClientModel newClient = ClientModel;
Client DomainModel = AutoMapper.Mapper.Map(newClient, new Client());
_clientService.Create(DomainModel);
存储库:
public class ClientService : IClientService
{
private readonly IRepository<Client> _clientRepository;
public void Create(Client client)
{
_clientRepository.Create(client);
}
}
我对客户端使用外键有问题。
此错误:NHibernate.PropertyValueException:非空 属性 引用空值或临时值 ProjectBase.Domain.Entities.Residence.Client
我认为这是因为您尝试使用尚未添加到 table 客户端的 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 Client()
{
Residences = new List<Residence>();
}
Ty.