开发者

Parent Key Column Type Change in Many-to-Many Mapping

开发者 https://www.devze.com 2022-12-23 18:15 出处:网络
I have a join table where the original table is a numeric type and the join table key column is a string type.Legacy decision that I am trying to avoid having to change to minimize the risk to the sco

I have a join table where the original table is a numeric type and the join table key column is a string type. Legacy decision that I am trying to avoid having to change to minimize the risk to the scope of work.

HasManyToMany<Attachment>(x => x.Attachments)
  .Table("ObjectAttachments")
  .ParentKeyColumn("ObjectId")
  .ChildKeyColumn("AttachmentId")
  .Fetch.Select()
  .LazyLoad()
  .AsBag();
开发者_JAVA技巧

The owning class uses a long (numeric) type for the identifier, while the join table uses a string type for the object identifier. How could I map this for it to change the data type on the fly? Is there something I can use to intercept and do the conversion?

Perhaps I can open up the discussion by providing a bit more background. The table relationship can be viewed as such:

Equipment -(r1)- ObjectAttachments -(r2)- Attachments

  • r1 is defined by Equipment.Id = ObjectAttachments.Object_Id AND ObjectAttachments.Class = 'Equipment'
  • r2 is defined by ObjectAttachments.Attachment_Id = Attachment.Attachment_Id

The thing that is throwing me for a loop is Equipment.Id is an integer data type and ObjectAttachments.Object_Id is a string.

UPDATE: Here is how I have proceeded for now - I created a seperate repository for the attachments and created a map that brings in the join table. The repository requires that I convert the equipment identifier to a string. It's not what I was hoping for but it works for now. Here's what that map looks like:

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);
    });


One solution would be to add an extra column to the table with the string id with a formula to return the string id cast to the correct numeric type. This constrains the problem with the database to the database rather than letting it bleed into the code.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号