.net 多对多映射中的父键列类型更改

.net 多对多映射中的父键列类型更改,.net,nhibernate,fluent-nhibernate,mapping,many-to-many,.net,Nhibernate,Fluent Nhibernate,Mapping,Many To Many,我有一个联接表,其中原始表是数字类型,联接表键列是字符串类型。我试图避免不得不更改的遗留决策,以将工作范围的风险降至最低 HasManyToMany<Attachment>(x => x.Attachments) .Table("ObjectAttachments") .ParentKeyColumn("ObjectId") .ChildKeyColumn("AttachmentId") .Fetch.Select() .LazyLoad() .AsBa

我有一个联接表,其中原始表是数字类型,联接表键列是字符串类型。我试图避免不得不更改的遗留决策,以将工作范围的风险降至最低

HasManyToMany<Attachment>(x => x.Attachments)
  .Table("ObjectAttachments")
  .ParentKeyColumn("ObjectId")
  .ChildKeyColumn("AttachmentId")
  .Fetch.Select()
  .LazyLoad()
  .AsBag();

一种解决方案是向具有字符串id的表中添加一个额外的列,并使用公式将字符串id转换为正确的数字类型。 这将数据库的问题限制在数据库中,而不是让它渗入代码中

Table("Attachments");
Id(x => x.Id);
Map(x => x.Name);
Map(x => x.Description);
Map(x => x.MimeType);
Map(x => x.Size);
Map(x => x.Date);
Map(x => x.Content).LazyLoad();
Join("ObjectAttachments", join =>
    {
        join.KeyColumn("Id");
        join.Map(x => x.ObjectId);
    });