簡體   English   中英

流暢的NHibernate JoinedSubClass已經過時了

[英]Fluent NHibernate JoinedSubClass is obsolete

我不知道什么。 我坐在這里有一個解決方案我有1個超類,有2個子類,我現在使用JoinedSubClass映射它,但我得知這個方法已經過時了,並說我應該使用ClassMap和SubClassMap,但如果我這樣做AutoMapping不起作用,我不希望這樣。 這有什么解決方法嗎?

這是層次結構:

public class Tag : Entity
{

public virtual string Name {get;set;}
public virtual User User {get;set;}

}

public class RespondentTag : Tag
{
    public virtual IList<Respondent> Respondents {get;set;}
}


public class ArchiveTag : Tag
{
    public virtual IList<Survey> Surveys {get;set;}
}

正如您可能想到的那樣,我希望這是一個每個層次結構的表 - 映射與子類,列表是多對多。 就像表'Tag',然后是Tag_Respondent和Tag_Archive(用於多對多關系)。

這是我目前正在使用的映射:

public class TagMap : IAutoMappingOverride<Tag>
{
  public void Override(AutoMapping<Tag> mapping)
  { 
     //This is obsolete
     mapping.JoinedSubClass("RespondentTagId", RespondentTagMap.AsJoinedSubClass());
     mapping.JoinedSubClass("ArchiveTagId", ArchiveTagMap.AsJoinedSubClass());

  }
}

public class RespondentTagMap
{
    public static Action<JoinedSubClassPart<RespondentTag>> AsJoinedSubClass()
    {
     return part =>

        part.HasManyToMany(x => x.RespondentList)
           .Cascade
           .SaveUpdate()
           .Inverse()
           .Table("Tag_Respondent");

    }
}


public class ArchiveTagMap
{
    public static Action<JoinedSubClassPart<ArchiveTag>> AsJoinedSubClass()
    {
     return part =>

        part.HasManyToMany(x => x.Surveys)
           .Cascade
           .SaveUpdate()
           .Inverse()
           .Table("Tag_Archive");

    }
}

有沒有人知道解決方法或解決此問題的其他解決方案? (不禁用自動化)

任何答案將不勝感激。

提前致謝!

如果我誤解了你的目標,請原諒我,但是我會對此進行一次嘗試,因為我的項目中有類似的繼承(盡管我使用帶有鑒別器列的每個基類表模式)。

我相信你可以通過讓FNH忽略你的Tag基類,然后覆蓋你的RespondentTagArchiveTag對象上的映射來實現多對多關系來完成你想做的事情。 因此,在您的FNH配置中,您需要為您的映射調用指定一個參數:

m.AutoMappings.Add(AutoMap.AssemblyOf<SomeObjectInMyAssembly>(new MyAutoMapConfig()) // Assuming you're using a config class
    .IgnoreBase(typeof(Entity))
    .IgnoreBase(typeof(Tag))
    .UseOverridesFromAssemblyOf<SomeOverrideClass>());

然后你必須在你存儲它們的任何程序集中設置覆蓋。 你有這樣的事情:

public class RespondentTagOverride : IAutoMappingOverride<RespondentTag>
{
    public void Override(AutoMapping<RespondentTag> mapping)
    {
        mapping.HasManyToMany(x => x.RespondentList)
            .Cascade
            .SaveUpdate()
            .Inverse()
            .Table("Tag_Respondent"); // Not sure if the table call works in the override...you may have to use a convention for this
    }
}

ArchiveTag對象也是如此。

這與我在繼承方案中的操作類似,但正如我所提到的,在我的automap配置類中,我重寫了IsDiscriminated方法,以指示我的對象是基於每個類的表並進行區分。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM