C# 使用NHibernate将一个映射到多个时出错
我是NHibernate和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
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>();
}