0

我有两个实体类(具有通用接口,便于自动映射),其中一个具有对另一个的通用引用:

public interface IModelClass
{
  Guid Id { get; set; }
}

class Order : IModelClass
{
  public virtual Guid Id { get; set; }
  public virtual ISet<Attachment> Attachments { get; set; }
}

class Attachment : IModelClass
{
  public virtual Guid Id { get; set; }
  public virtual IModelClass AttachedTo { get; set; }
}

我可以定义通用参考ReferencesAny

mapping.ReferencesAny(x => x.AttachedTo)
       .EntityTypeColumn("entity_type")
       .EntityIdentifierColumn("entity_id")
       .IdentityType<Guid>()
       .MetaType<string>()
       .AddMetaValue<Order>("ORDER")
       .Cascade.None();

这很好用,只要我只直接使用附件并且不要尝试从Order侧面做事。不过,我想要的是映射关系的反向 - 即通常由以下方式处理的内容:

mapping.HasMany(x => x.Attachments)

这样我就可以将附件添加到订单的集合中并让它们持久化,而无需手动完成并设置/保存每个附件(而且我必须开始传递会话以获取提交的附件同一笔交易)。这不起作用 - 它只是正常工作并order_id在附件表上创建一个列。

有什么方法可以设置此映射以使其“有效”吗?

4

1 回答 1

2
mapping.HasMany(x => x.Attachments)
    .KeyColumn("entity_id")   // to give it the right column to use
    .Where("entity_type = 'ORDER'")  // makes sure that only attachments for the order are loaded
    .Inverse()
    .Cascade.AllDeleteOrphan(); // or .Cascade.All(); if Attachments should stay without
于 2013-03-13T09:46:34.633 回答